Application graphique d'un jeu d'échecs

tomalion Messages postés 59 Date d'inscription dimanche 24 août 2008 Statut Membre Dernière intervention 26 octobre 2015 - 3 févr. 2011 à 15:48
 Utilisateur anonyme - 4 févr. 2011 à 12:46
Bonjour,

Je suis étudiant et j'ai eu quelques cours sur la programmation java. Je dois rendre une application concernant un echiquier et je bloque dès le début. Je ne parvient pas à créer tous les boutons qui seront dans l'interface, qui correspondent aux cases sur lesquelles les figures vont et aussi celles marquées a b c d ... et 1 2 3 etc...

Je ne parvient pas a cerner les concept de gridlayout et de matrice de bouton, puis-je allier les deux ? Ou ils sont séparé ? Car je ne parvient pas à les insérer dans un JPanel, voici mon code :


import javax.swing.JFrame;
import java.awt.Color; //cf p13 poly exos
import javax.swing.JButton;//composant bouton
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;


public class Vue extends JFrame implements ActionListener, ItemListener{
JButton B1,B2;
JButton [][]VB;
JPanel P1,P2,P3;
JTextField T1,T2,T3;
JLabel J1,J2,J3,J4,J5,J6,J7,J8;
JComboBox L1,L2,L3,L4;
JOptionPane JOP1, JOP2;


public Vue() {
this.setTitle("Application graphique du jeu d'échecs");
this.setSize(1000,800);
this.getContentPane().setBackground(Color.yellow);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);


L1 = new JComboBox();
L1.addItem("Roi");
L1.addItem("Reine");
L1.addItem("Tour");
L1.addItem("Cavalier");
L1.addItem("Fou");
L1.addItem("Pion");
L1.addItemListener(this);

L2 = new JComboBox();
L2.addItem("Noir");
L2.addItem("Blanc");
L2.addItemListener(this);

L3 = new JComboBox();
L3.addItem("A");
L3.addItem("B");
L3.addItem("C");
L3.addItem("D");
L3.addItem("E");
L3.addItem("F");
L3.addItem("G");
L3.addItem("H");
L3.addItemListener(this);


L4 = new JComboBox();
L4.addItem("1");
L4.addItem("2");
L4.addItem("3");
L4.addItem("4");
L4.addItem("5");
L4.addItem("6");
L4.addItem("7");
L4.addItem("8");
L4.addItemListener(this);


B1 = new JButton("Cases accessibles");
B1.setBackground(Color.yellow);
B1.addActionListener(this);

B2 = new JButton("Remise à zéro");
B2.setBackground(Color.orange);
B2.addActionListener(this);

J1 = new JLabel("Paramètres de votre pièce : ");

J2 = new JLabel("Pièce :");

J3 = new JLabel("Couleur :");

J4 = new JLabel("Colonne :");

J5 = new JLabel("Ligne :");

J6 = new JLabel("Pièce :");

J7 = new JLabel("Colonne :");

J8 = new JLabel("Ligne :");

T1 = new JTextField("",15);//15=nb caractères
T1.setBackground(Color.white);

T2 = new JTextField("",2);//15=nb caractères
T2.setBackground(Color.white);

T3 = new JTextField("",2);//15=nb caractères
T3.setBackground(Color.white);

VB =new JButton [9][9];
for(int i=0; i<VB.length;i++)
{
for (int j = 0;j<VB[i].length;j++)
{
VB[i][j]= new JButton ("");

}
}

GridLayout VB = new GridLayout(9,9);
this.setLayout(VB);

this.getContentPane().add(VB,"Center");



BorderLayout BL = new BorderLayout();
this.setLayout(BL);



P1 = new JPanel();
this.getContentPane().add(P1);//ajouter les panels au JFrame

P2 = new JPanel();
this.getContentPane().add(P2);

P3 = new JPanel();
this.getContentPane().add(P3);

P1.add(J1);
P1.add(J2);
P1.add(L1);
P1.add(J3);
P1.add(L2);
P1.add(J4);
P1.add(L3);
P1.add(J5);
P1.add(L4);

P2.add(J6);
P2.add(T1);
P2.add(J7);
P2.add(T2);
P2.add(J8);
P2.add(T3);
P2.add(B1);
P2.add(B2);


this.getContentPane().add(P1,"North");
this.getContentPane().add(P2,"South");

this.setVisible(true);
}


De plus, comment mettre chaque bouton avec un nom particulier car avec la matrice, on ne choisi pas trop le nom, du moins je ne sais pas comment faire.

Merci de votre aide

1 réponse

Utilisateur anonyme
4 févr. 2011 à 12:46
Déjà, ceci est faux :
this.getContentPane().add(VB,"Center"); 

this.getContentPane().add(P1,"North");
this.getContentPane().add(P2,"South"); 


Apprends à lire la documentation :
http://download.oracle.com/javase/6/docs/api/

Je te conseille aussi de lire les tutoriels d'Oracle à propos de Swing et AWT car tu ne sembles pas du tout maîtriser les concepts.

Ce code est faux :
VB =new JButton [9][9];
for(int i=0; i<VB.length;i++)
{
for (int j = 0;j<VB[i].length;j++)
{
VB[i][j]= new JButton ("");

}
}

GridLayout VB = new GridLayout(9,9);
this.setLayout(VB);

this.getContentPane().add(VB,"Center"); 

Crée un JPanel ou prends P3 qui semble ne servir à rien, mets lui un GridLayout comme LayoutManager avec la méthode setLayout(), ajoute alors les boutons à ce JPanel puis ajoute le JPanel à ta JFrame en faisant par exemple :
add(P3,BorderLayout.Center);

Tu n'as pas besoin d'appeler getContentPane(), c'est facultatif dans de nombreux cas depuis Java 1.5. Où as-tu lu qu'on peut passer des chaînes de caractère arbitraires comme contrainte? Vous êtes plusieurs à avoir faire l'erreur sur javafr, je me dis que vous avez dû vous inspirer d'une mauvaise source. Cordialement.





0
Rejoignez-nous