pb rafraichissement scrollpane [swing] - Java - Programmation
Marsh Posté le 25-08-2003 à 13:32:02
ca fait un certain temps que j'ai plus fait de Swing (donc je risque de dire des conneries)
si mes souvenirs sont bons pour faire fonctionner un JScrollPane il suffit de lui ajouter un component de la manière suivante :
Code :
|
Marsh Posté le 25-08-2003 à 15:36:18
Hum... Est-ce vraiment une bonne idée de redéfininr repaint() à la place de paint() ?
Marsh Posté le 25-08-2003 à 15:44:45
ben g redefinit paint() et repaint :
public void repaint(Graphics g){
paint(g);
}
c tout... m bon j'enleve
sinon l'astuce d'avant marche pô et le coup du listener sur le scrollBar non plus...
d'autres idées ?
Marsh Posté le 25-08-2003 à 15:51:17
Ah oui, quel c**, j'avais oublié la première phrase.
Sinon, peut-être qu'un aperçu de ton code pourrait nous permettre de mieux t'aider ?
Marsh Posté le 25-08-2003 à 15:58:37
Krueger a écrit : |
+1
sinon si tu mets une 'bête' Jlist dans ton scrollpane, ca fonctionne ?
Marsh Posté le 25-08-2003 à 18:10:13
Si tu veux par exple mettre une JList avec un ScrollPane et l'ajouter a ta fenetre, il afut ajouter le ScrollPane et pas la JList.
Code :
|
Normalement lors d'ajout le rafraichissement est automatique
Marsh Posté le 26-08-2003 à 20:11:59
voici la facon dont je crée ma fenetre :
MyPanel panel = new MyPanel(liste);
jsp = new JScrollPane();
jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
jsp.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
jsp.getViewport().add(panel);
getContentPane().add( BorderLayout.CENTER, jsp);
panel.setVisible(true);
et voici ma methode paint (définie dans MyPanel, qui etend JPanel) :
public void paint(Graphics g){
int largeureCumulee = space;
int hauteurCumulee = space;
int y = 0;
//dessin des codes sur le panel
g.setColor(new Color(0,0,0));
Barcode code;
setSize(WIDTH, HEIGHT);
for(int i = 0 ; i < liste.getItemCount() ; i++){
code = new Barcode(liste.getItem(i));
if(largeureCumulee + code.getStringCode().length() >= WIDTH){
hauteurCumulee += (code.getHauteur() + 2* space);
largeureCumulee = space;
}
for(int j = 0; j < code.getStringCode().length(); j++){
if((code.getStringCode().charAt(j)) == 'b'){
g.drawLine(j + largeureCumulee, hauteurCumulee,j + largeureCumulee, code.getHauteur() + hauteurCumulee);
}
}
g.drawString(code.toString(), (int)((code.getStringCode().length() - (code.toString().length()))/2) + largeureCumulee, code.getHauteur() + 12 + hauteurCumulee);
largeureCumulee += (code.getStringCode().length() + space);
}
//fin du dessin des codes
}
}
dsl d'être si long, m c pour placer le contexte
Marsh Posté le 26-08-2003 à 21:36:46
As-tu toujours le problème si tu ajoutes super.paint(g) à la fin de ta méthode paint() ?
Et puis pour rendre ton code plus lisible tu peux le mettre entre balises [ cpp] et [ /cpp].
Marsh Posté le 26-08-2003 à 23:33:29
oui ca marche si je le met au DEBUT de la methode
merci
c bizard ca, l'appel à super est pas implicite dans ce cas comme dans le constructeur ?
c une redéfinition ?
Marsh Posté le 27-08-2003 à 09:20:19
Hééé non. Uniquement dans un constructeur, qu'il y ait redéfinition ou pas.
Marsh Posté le 25-08-2003 à 10:02:35
salut,
j'ai place ds un JScrollpane, un objet d'une classe parso ki derive de JPanel ds laquelle g redéfinit paint()
quand je fait défiler mo objet MyPanel, il n'est rafraichit que lorsque je déplace ma fenetre partiellement en dehors de l'écran
g redéfinit repaint() qui fait appel à paint()
comment forcer l'appel à repaint ?
puis je ajouter un mouselistener à mon scrollbar pour appeler repaint lors du mouser over ? et comment ?
merci