Bonjour,
j'ai un probleme pour rafraichir des cellules (le rendu) dans une jtable:
j'ai une jtable qui me sert de rowHeader pour une table principale.
cette table se trouve donc dans le rowHeaderView de mon jscrollpane
j'ai un MouseMotionListener qui me permet de changer la couleur des cellules de cette table sur laquelle je me balade.
En gros je recupere la cellule au dessous de mon pointeur, je recupere le renderer, je modifie le background.
Le probleme est que le repaint ne fonctionne que si j'appelle repaint() sur la table mais pas quand j'appelle repaint() sur le Jcomponent correspondant au renderer !
Hors la table en question peut avoir énormement de cellules visbles, ce qui fait qu'il y a un petit temps de latence avant le changement de background.
Si je parviens a faire le repaint uniquement sur la nouvelle cellule (et celle que le pointeur vient de quitter bien sur) le tout serait plus fluide.
donc en gros comment faire pour que le repaint d'un jcomponent dans une cellule de table et le tou dans un rowheaderView fonctionne ?
Je joins le code de la methode mouseMoved dans laquelle je fais tout ceci.
merci pour votre aide
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 public void mouseMoved(MouseEvent e) { int column = table.columnAtPoint(e.getPoint()); int row = table.rowAtPoint(e.getPoint()); currentValue = table.getValueAt(row, column); if (row > -1 && column > -1){ if (currentValue!=oldValue){ if (oldValue!=null) ((TableCellRenderer)table.getCellRenderer(oldRow, oldCol)).getTableCellRendererComponent(table, oldValue, false, false, oldRow , oldCol).setBackground(mouseOut); JComponent comp = (JComponent)((TableCellRenderer)table.getCellRenderer(row, column)).getTableCellRendererComponent(table, currentValue, false, false, row , column); comp.setBackground(mouseOn); oldValue = currentValue; oldRow = row; oldCol = column; table.repaint(); /* * je prefereai ici faire comp.repaint() qui prendrai moins de temps */ } } else { oldValue = null; } }
Partager