bonjour,
j'ai un JPanel dans lequel je dessine mais quand je scroll le panel, le dessin disparait ou est mal affiché,
j'ai redéfinit les méthode de ComponentListener je pensais que ça suffirais mais non, que faire ?
Version imprimable
bonjour,
j'ai un JPanel dans lequel je dessine mais quand je scroll le panel, le dessin disparait ou est mal affiché,
j'ai redéfinit les méthode de ComponentListener je pensais que ça suffirais mais non, que faire ?
Pour le scroll, si tu utilises un JScrollPane, il n'y a rien à faire de particulier sur le JPanel. Il faut uniquement bien utiliser la méthode "paintComponent".
Donne ton code.
en fait le ce JPanel est dans un JScrollPane aprèsCode:
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 /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package MyPackage; import java.util.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; /** * * @author rniamo */ class Gant extends JPanel implements ComponentListener { @Override public void paint(Graphics g) { //...blabla } @Override public void componentResized(ComponentEvent e) { paint(this.getGraphics()); } @Override public void componentMoved(ComponentEvent e) { paint(this.getGraphics()); } @Override public void componentShown(ComponentEvent e) { paint(this.getGraphics()); } @Override public void componentHidden(ComponentEvent e) { paint(this.getGraphics()); } }
j'ai un soucis avec ma disposition de fenêtre :
j'ai un jpanel avec setLayout(new BoxLayout(this,BoxLayout.PAGE_AXIS));,
dedans j'en mets un autre en setLayout(new BoxLayout(this,BoxLayout.LINE_AXIS));
et un avec un seul composant. Le problème est que le premier (qui contient que des boutons) est trop haut, comment forcer la taille à son minimum en hauteur ?
edit : j'ai toujours le problème avec l'implémentation de ComponentListener, et le dessin part même quand j'affiche une dialogOpen().
Ne jamais faire "paint(this.getGraphics());". Il faut appeler simplement "repaint".
Quel est le code de "paint" ?
Quel est le code qui ajoute le JPanel dans le JScrollPane ?
l'ajout se fait dans un jpanel par un simple add() et ce panel est ajouté parCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14 public void paintComponent(Graphics g) { super.paintComponent(g); if (data==null) return; height=(int) (0.25 * this.getSize().height); border=(int) (0.0625 * this.getSize().height); width=this.getSize().width-2*border; int level=height+border; // g.setFont(new Font("Arial",Font.CENTER_BASELINE,g.getFont().getSize())); FontMetrics metrics=g.getFontMetrics(); getGraphics().clearRect(0,0,getSize().width,getSize().height); }
Code:tabbedPane.addTab(new JScrollPane(panel));
Pour dessiner sur un composant il ne faut JAMAIS utiliser des Graphics issus de la méthode getGraphics (et de façon général on évite de manipuler les graphics d'un composant via getGraphisc, toute opération de dessin s'effectuant dans la méthode paintXXX qui fournit les graphics adéquats). La méthode paintComponent fournit les Graphics à utiliser en tant que paramètre, et c'est ceux ci qu'il faut utiliser.
Bref quand tu fais du Swing, la méthode getGraphics ne doit être jamais être appelée, (sauf cas très exceptionnel, mais le but n'est pas de détailler les corner cases improbables ici).
1) comment je fais alors pour raffrachir ma zone ?
2) ça ne résoud pas le problème du mauvais raffraichissement lors d'appel à un menu ou pop up.
Sinon j'en ai pris note mais pour le 1) je ne sait pas faire autrement.
en remplissant le fond avec un rectangle c'est résolu.
merci