Bonjour à tous,
Bon je sais que c'est un problème récurent, mais j'ai du mal avec le rafraichissement d'une JFrame.
Je me suis créé un JPanel qui me sers d'image d'arrière plan. Dans cette classe j'ai donc redéfinit la méthode PaintComponent(Graphics g).
Dans une JFrame je l'applique sur le contentPane en BorderLayout.CENTER.
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 @Override protected void paintComponent(Graphics g) { super.paintComponent(g); if (image == null) { return; } int x = 0; int y = 0; int width = 0; int height = 0; if (this.etirer) { width = this.getWidth(); height = this.getHeight(); } else { width = this.image.getWidth(this); height = this.image.getHeight(this); x = ((this.getWidth() - width) / 2); y = ((this.getHeight() - height) / 2); } g.drawImage(this.image, x, y, width, height, this); }
Si je ne mets rien dessus (label, textbox,....) souvent lors du démarrage, je n'ai pas l'image complète. Cela ressemble plus à quelques pixels répartit par endroits, ou a une ligne sur 2 correspondant à l'image et l'autre est de la couleur par défaut de la JFrame, c'est à dire gris.
J'ai essayé les différentes méthodes, validate, invalidate, repaint,.. sans succès. J'appelle ces méthodes dans le constructeur lors du lancement.
Donc que dois-je faire dans mon constructeur:
validate sur la JFrame ou sur le JPanel?
invalidate sur la JFrame ou sur le JPanel?
repaint sur la JFrame ou sur le JPanel?
ou quelle combinaison et ou? Dans le constructeur? Dans la méthode PaintComponent de mon JFrame?
Je pense que ce problème est lié aux différents threads qui tourne avec l'affichage.
je vous mets le constructeur de cette JFrame
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public MaJFrame() { initComponents(); this.setResizable(true); this.setLocation(100, 100); this.jPanelImageFond.setImage(Ressources.LINK_IMAGE_PRESENTATION); this.jPanelImageFond.setEtirer(true); this.setPreferredSize(this.jPanelImageFond.getPreferredSize()); this.setSize(this.jPanelImageFond.getSize()); }
Je vous précise que je me sers du Designer de netbeans en majeur parti pour éviter de coder les choses de bas niveau du style "getContentPane().add(xxx), ...".
Je vous remercie d'avance pour les réponses que vous pourriez me fournir
Merci à tous.
Partager