[swing] pb rafraichissement scrollpane

pb rafraichissement scrollpane [swing] - Java - Programmation

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 :)

Reply

Marsh Posté le 25-08-2003 à 10:02:35   

Reply

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 :
  1. scrollPane.getViewPort().add(component);

Reply

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() ?


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

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  :D  
 
sinon l'astuce d'avant marche pô et le coup du listener sur le scrollBar non plus...
 
d'autres idées ?

Reply

Marsh Posté le 25-08-2003 à 15:51:17    

Ah oui, quel c**, j'avais oublié la première phrase. :sarcastic:
 
Sinon, peut-être qu'un aperçu de ton code pourrait nous permettre de mieux t'aider ?


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 25-08-2003 à 15:58:37    

Krueger a écrit :


Sinon, peut-être qu'un aperçu de ton code pourrait nous permettre de mieux t'aider ?


 
+1
 
 
sinon si tu mets une 'bête' Jlist dans ton scrollpane, ca fonctionne ?

Reply

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 :
  1. // list : une JList crée a partir d'un modele (ca tu t'en fout)
  2. list = new JList(model);
  3. // Création du ScrollPane sur la liste
  4. listScroll = new JScrollPane(this.list);
  5. // Ajout du ScrollPane au Panel (ou a quoi que ce soit d'autre)
  6. pane.add(listScroll);


 
Normalement lors d'ajout le rafraichissement est automatique

Reply

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  :ange:  

Reply

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].


Message édité par Krueger le 26-08-2003 à 21:39:30

---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Marsh Posté le 26-08-2003 à 23:33:29    

oui ca marche si je le met au DEBUT de la methode :)
 
merci  :bounce:  
 
c bizard ca, l'appel à super est pas implicite dans ce cas comme dans le constructeur ?
 
c une redéfinition ?
 

Reply

Marsh Posté le 26-08-2003 à 23:33:29   

Reply

Marsh Posté le 27-08-2003 à 09:20:19    

Hééé non. ;) Uniquement dans un constructeur, qu'il y ait redéfinition ou pas.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed