Bonjour,
Je rencontre actuellement un problème que je n'arrive pas à résoudre malgré mes recherches. Je précise que je développe sous l'IDE netbeans 6, sous linux.
L'application à réaliser est un simulateur de vivarium.
Le problème est le suivant :
Le cadre de mon application est une JFrame, qui elle même contient un JPanel qui sera utiliser pour visualiser le vivarium. Ce JPanel contient à son tour un JPanel qui est un attribut d'une classe que j'ai appelé GTerrain.
Enfin, le JPanel de la classe GTerrain, contient des cases qui sont représentées graphiquement par des JButton, j'ajoute donc ces JButon au JPanel de GTerrain.
Quand je lance mon projet je m'attends donc à ce que ma JFrame contienne un quadrillage de boutons, mais malheureusement ils n'apparaissent pas.
Au niveau du code ça donne :
Dans ma JFrame (code généré par Netbeans) :
Dans ma classe GTerrain :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60 public class JFramarium extends javax.swing.JFrame { /** Creates new form JFramarium */ public JFramarium() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { GTerrain terrain ; viewer = new javax.swing.JPanel(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("La guerre des mondes"); setResizable(false); terrain = new GTerrain(viewer) ; viewer.add(terrain.getJPTerrain()) ; org.jdesktop.layout.GroupLayout viewerLayout = new org.jdesktop.layout.GroupLayout(viewer); viewer.setLayout(viewerLayout); viewerLayout.setHorizontalGroup( viewerLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 400, Short.MAX_VALUE) ); viewerLayout.setVerticalGroup( viewerLayout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(0, 468, Short.MAX_VALUE) ); org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(viewer, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING) .add(layout.createSequentialGroup() .add(viewer, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE) .addContainerGap(102, Short.MAX_VALUE)) ); java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); setBounds((screenSize.width-410)/2, (screenSize.height-600)/2, 410, 600); }// </editor-fold> // Variables declaration - do not modify private javax.swing.JPanel viewer; // End of variables declaration }
Enfin dans ma classe GCase :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 public class GTerrain extends Terrain { JPanel jpTerrain ; //Le JPanel ajouté au JPanel de la JFrame GTerrain(JPanel viewer) { super((int) viewer.getHeight()/GCase.hauteur, (int) viewer.getWidth()/GCase.largeur ) ; jpTerrain = new JPanel() ; for(int i=0;i<getHauteur();i++) { for(int j=0;j<getLargeur();j++) { GCase tmpGC = new GCase(getCase(i,j)) ; jpTerrain.add(tmpGC.getJBCase()) ; //Ici j'ajoute les boutons qui représentent des cases } } } public JPanel getJPTerrain(){ return jpTerrain ; } }
Désolé pour la taille du code, mais je pense que tout ce que j'ai affiché peut s'avérer utile pour comprendre mon erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class GCase extends Case { private JButton jbCase ; //on utilise le composant jpanel pour representer une case static int hauteur = 10 ; //hauteur en pixel static int largeur = 10 ; //largeur en pixel public GCase(Case c){ super(c.getX(),c.getY()) ; jbCase = new JButton() ; jbCase.setSize(hauteur,largeur) ; } public JButton getJBCase() { return jbCase ; } }
Merci d'avance pour vos réponses
Partager