affichage contenu on mouseEntered
Bonjour le forum,
dans un tableau de mon appli, les colonnes sont parfois trop petites pour afficher tout le contenu des cellules et j'aimerais qu'au passage de ma souris sur les cellules, le contenu complet de ma cellule apparaisse...
J'ai un souci et je ne vois pas d'où il vient : lors du passage de ma souris sur une cellule, tout le texte contenu ne s'affiche pas....
est-ce que quelqu'un peut m'aider?
Thanks in advance,
Bap
Code:
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 46 47 48 49 50 51 52 53 54 55
|
JComponent c = new JComponent() {
public void paint(Graphics g) {
boolean selected = table.isRowSelected(row);
Component renderer = table.getCellRenderer(row, column).getTableCellRendererComponent(table, value, selected, true, row, column);
c.setFont(table.getFont());
Rectangle paintBounds = SwingUtilities.convertRectangle(table, bounds, this);
SwingUtilities.paintComponent(g, renderer, this, paintBounds);
if (selected) {
return;
}
g.setColor(Color.WHITE);
((Graphics2D) g).draw(paintBounds);
}
};
/**
*
* @param e
*/
public void mouseEntered(MouseEvent e) {
this.column = this.table.columnAtPoint(e.getPoint());
this.row = this.table.rowAtPoint(e.getPoint());
this.value = (String) this.table.getModel().getValueAt(this.row, this.column);
this.bounds = this.table.getCellRect(this.row, this.column, true);
if (!((DefaultTableCellRenderer) this.table.getCellRenderer(this.row, this.column)).getVisibleRect().contains(this.bounds)) {
if (this.oldGlassPane == null) {
this.oldGlassPane = this.table.getRootPane().getGlassPane();
this.c.setOpaque(false);
this.table.getRootPane().setGlassPane(c);
this.c.setVisible(true);
} else {
this.table.getRootPane().repaint();
}
} else {
resetGlassPane();
}
}
/**
*
* @param e
*/
public void mouseExited(MouseEvent e) {
resetGlassPane();
}
private void resetGlassPane() {
if (this.oldGlassPane != null) {
this.c.setVisible(false);
this.table.getRootPane().setGlassPane(this.oldGlassPane);
this.oldGlassPane = null;
}
} |
mouseEntered -> mouseMoved
Bonjour le forum, gifffftane,
tout d'abord, j'ai fait une première erreur puisque c'est un mouseMoved et pas mouseEntered qu'il faut que j'utilise ici.
Citation:
dans mouseEntered, si le glassPane est toujours l'ancien, tu en mets bien un nouveau; mais tu ne fais pas de repaint (es-tu sûr qu'il y ait besoin d'un nouveau glassPane, d'ailleurs ? )
Effectivement il est plus propore que j'ajoute this.table.getRootPane().repaint() à la fin de ma méthode resetGlassane(). En revanche, cella ne change pas le fonctionnement.
Citation:
dans le paint, tu sembles redessiner le renderer de la cellule sur le renderer de la cellule... je vois pas très bien l'objectif ? je ne vois même pas de changement de taille du composant renderer ?
Dans le paint, je redessine le renderer pour un afficher un plus grand par dessus. Le but est qu'il contienne toute le contenu de ma cellule. Le dimessionnement de ce nouveau renderer se fait par le contenu (value) normalement avec la méthode getTableCellRendererComponent(table, value, selected, true, row, column);
Je suis vraiment coincé... est ce que quelqu'un a une idée?
Thanks in advance, :mouarf:
Bap