Bonjour,
je vous présente mon problème. Je fais une interface graphique dans laquelle mes éléments dessinent leur fond. J'ai de plus un menu permettant de changer le contenu du JPanel principal. Pour faciliter, j'avais prévu de créer autant de JPanel qu'il éxiste de pages, et de simplement modifier celui qui devait etre affiché.
Seulement, à priori, tout devrait fonctionner, mais JAVA en a décidé autrement. Lorsque je clique sur un bouton pour modifier mon panel, le clic est bien pris en compte, le panel change, MAIS ne s'affiche pas... Si, après cette action (panel invisible donc), je réduis/agrandit la fenêtre, le panel s'affiche. Un soucis d'actualisation? Pas de problème! J'ajoute un repaint() à ma méthode... Sauf que le soucis se reproduit toujours... Voici le code pour que vous compreniez mieux mon désarroi. Le problème se situe au niveau de la méthode affiche(int page) de la classe JCorps.
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 public class Controleur implements MouseListener{ private static JInterface inter; private static Personnage perso; public Controleur() throws Exception{ inter = new JInterface(); for ( int i = 0; i < inter.getMenu().getBoutons().size(); i++ ) inter.getMenu().getBoutons().get(i).addMouseListener(this); } public void mouseClicked(MouseEvent e){ for ( int i = 0; i < inter.getMenu().getBoutons().size(); i++ ) if ( e.getSource() == inter.getMenu().getBoutons().get(i) ) inter.getCorps().affiche(i); } }
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 public class JInterface extends JFrame { private JCorps corps; private BorderLayout frameLayout; public JInterface(){ super("..."); init(); } public void init(){ frameLayout = new BorderLayout(); corps = new JCorps(); setLayout(frameLayout); add(corps, BorderLayout.SOUTH); setLocation(400,250); setSize(new Dimension(800,600)); setResizable(false); setDefaultCloseOperation(EXIT_ON_CLOSE); setVisible(true); } public JMenu getMenu(){ return corps.getMenu(); } public JCorps getCorps(){ return corps; } }
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 public class JCorps extends JPanel{ private JMenu menu; private ArrayList<JContenu> contenu; BorderLayout layout; public JCorps () { super(); layout = new BorderLayout(); setLayout(layout); contenu = new ArrayList<JContenu>(); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); contenu.add(new JContenu()); setPreferredSize(new Dimension(800, 440)); add(menu = new JMenu(), BorderLayout.EAST); add(contenu.get(0), BorderLayout.WEST); } public void paint(Graphics g) { try { BufferedImage image = ImageIO.read(new File("img/corps.jpg")); g.drawImage(image, 0, 0, null); paintChildren(g); } catch (IOException e) { e.printStackTrace(); } } public void affiche(int page){ removeAll(); add(menu, BorderLayout.EAST); add(contenu.get(page), BorderLayout.WEST); repaint(); } public JMenu getMenu(){ return menu; } }
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 public class JContenu extends JPanel{ public JContenu() { super(); setPreferredSize(new Dimension(600, 440)); } public void paint(Graphics g) { try { BufferedImage image = ImageIO.read(new File("img/contenu.png")); g.drawImage(image, 0, 0, null); paintChildren(g); } catch (IOException e) { e.printStackTrace(); } } }
Et la je bloque completement... Un problème de synchro? Mais dans ce cas pourquoi le paint est-il bloqué? Je compte sur vos lumièreEt merci à tous ceux qui prendront le temps d'étudier mon cas
Ps : Je suis preneur d'autres solutions si vous me donnez leurs avantages... Par contre j'aimerais vraiment comprendre la nature du soucis ici.
Partager