2011-11-06 2 views
3

pour un projet d'école, je fais un échiquier en java.java2D pions sur un échiquier glisser-déposer

il y avait certaines limitations, étant que nous ne pouvons pas utiliser d'images pour l'un des pions. Nous devions faire un pion de plusieurs formes.

Par exemple, j'ai un pion fait d'un cercle et d'un carré arrondi. voici quelques morceaux du code. Voici la carte définie comme un ensemble de caractères, représentent chacun un chèque sur la carte

private char[][] board = new char[][] { { 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' }, 
             { 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' }, 
             { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
             { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
             { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
             { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, 
             { 'P', 'P', 'P', 'P', 'P', 'P', 'P', 'P' }, 
             { 'T', 'H', 'B', 'Q', 'K', 'B', 'H', 'T' } }; 

et est le contenu ici de la méthode qui crée un pion normale

for(int i=0; i<8; i++) { 
     for(int j=0; j<8;j++) { 

      if(board[j][i] == 'P') { 
       Ellipse2D.Double ellipse = new Ellipse2D.Double(i * getWidth()/8 + 20, 
                   j * getHeight()/8 + 20, 
                   getWidth()/8 - 40,getHeight()/8 - 40); 

       g2d.setPaint(new GradientPaint(i * getWidth()/8 , j * getHeight()/8 + 20, Color.orange, i * getWidth()/8, j * getHeight()/8 + 60, 
         Color.pink, false)); 

       g2d.fill(ellipse); 

       RoundRectangle2D.Double roundRect = new RoundRectangle2D.Double(i*getWidth()/8 + 20, 
                       j*getHeight()/8 + 10, 
                       getWidth()/8 - 40, getHeight()/8-70,5,5); 

       g2d.setPaint(new GradientPaint(i * getWidth()/8 , j * getHeight()/8 + 20, new Color(20,20,150), i * getWidth()/8, j * getHeight()/8 + 60, 
         new Color(20, 20, 100), false)); 

       g2d.fill(roundRect); 

      } 
     } 
    } 

probablement pas le code plus propre pour le faire, s'il y a des suggestions pour faire mieux, s'il vous plaît, suggérez! Maintenant, le vrai problème, et ma question est que nous devons être capables de glisser et déposer ces formes multiples à la fois sur un autre endroit sur le plateau, et je n'ai honnêtement aucune idée de la façon de le faire.

Toute aide que vous pouvez me donner sera très appréciée!

Merci d'avance!

Répondre

2

Je vous suggère de ne pas utiliser d'image mais de créer quelques images tamponnées au début de votre programme pour créer des images pour vos pièces d'échecs. Puis ajoutez-les à ImageIcons (qui peut être utilisé plus d'une fois), et ajoutez-les à JLabels (qui ne peut pas). Ainsi, par exemple, le côté blanc aura 8 JLabels pour les 8 pions, mais chacun de ces JLabels utilisera le même pion blanc ImageIcon. Ensuite, ajoutez simplement les JPanels JLabels qui représentent chaque cellule de l'échiquier. Je donnerais à la cellule JPanels un GridBagLayout pour que les JLabels soient ajoutés à leur centre sans aucun problème.

Pour un exemple de cela, s'il vous plaît vérifier sur: does-adding-a-jlabel-to-a-jpanel-hide-the-jpanel

+0

Je ne pense pas que vous pouvez glisser-déposer un JPanel. – toto2

+0

@toto: Je suis d'accord, ce n'est pas disponible hors de la boîte, mais il peut être ajouté s'il est étendu, mais vous n'avez pas besoin de réellement. Il suffit d'utiliser un JLayeredPane et, en cliquant, de déplacer le JLabel du JPanel dans la couche de déplacement du JLayeredPane. Voir mon lien ci-dessus pour un exemple de ceci. –

+0

J'ai couru votre exemple. C'est assez complet. vous auriez pu faire l'IA aussi pendant que vous y étiez. – toto2