web-dev-qa-db-fra.com

Comment ajouter une info-bulle à une cellule dans un jtable?

J'ai un tableau où chaque ligne représente une image. Dans la colonne Path, je stocke son chemin absolu. La chaîne étant un peu longue, j'aimerais que lorsque je passe la souris sur la cellule spécifique, une info-bulle devrait apparaître à côté de la souris contenant les informations de la cellule.

20
Pantaziu Cristian

Je suppose que vous n'avez pas écrit de CellRenderer personnalisé pour le chemin mais utilisez simplement le DefaultTableCellRenderer. Vous devez sous-classer le DefaultTableCellRenderer et définir l'info-bulle dans le getTableCellRendererComponent. Définissez ensuite le rendu de la colonne.

class PathCellRenderer extends DefaultTableCellRenderer {
    public Component getTableCellRendererComponent(
                        JTable table, Object value,
                        boolean isSelected, boolean hasFocus,
                        int row, int column) {
        JLabel c = (JLabel)super.getTableCellRendererComponent( /* params from above (table, value, isSelected, hasFocus, row, column) */ );
        // This...
        String pathValue = <getYourPathValue>; // Could be value.toString()
        c.setToolTipText(pathValue);
        // ...OR this probably works in your case:
        c.setToolTipText(c.getText());
        return c;
    }
}

...
pathColumn.setCellRenderer(new PathCellRenderer()); // If your path is of specific class (e.g. Java.io.File) you could set the renderer for that type
...
26
Hauke Ingmar Schmidt

Utilisez simplement le code ci-dessous lors de la création de l'objet JTable.

JTable auditTable = new JTable(){

            //Implement table cell tool tips.           
            public String getToolTipText(MouseEvent e) {
                String tip = null;
                Java.awt.Point p = e.getPoint();
                int rowIndex = rowAtPoint(p);
                int colIndex = columnAtPoint(p);

                try {
                    tip = getValueAt(rowIndex, colIndex).toString();
                } catch (RuntimeException e1) {
                    //catch null pointer exception if mouse is over an empty line
                }

                return tip;
            }
        };
34
user3223087

Vous dites que vous stockez un chemin absolu dans une cellule. Vous utilisez probablement un JLabel pour définir chaîne de chemin absol. Supposons que vous ayez une étiquette dans votre cellule, utilisez des balises html pour exprimer le contenu des info-bulles:

JLabel label = new JLabel("Bla bla");
label.setToolTipText("<html><p>information about cell</p></html>");

setToolTipText() peut être utilisé pour certains autres composants Swing si vous utilisez autre chose que JLabel.

0
Juvanis