Как добавить всплывающую подсказку в ячейку в jtable? - PullRequest
18 голосов
/ 27 февраля 2012

У меня есть таблица, где каждая строка представляет изображение.В столбце Path я храню его абсолютный путь.Строка довольно длинная, и мне хотелось бы, чтобы при наведении курсора мыши на указанную ячейку рядом с мышкой появлялась всплывающая подсказка с информацией из ячейки.

Ответы [ 3 ]

34 голосов
/ 22 января 2014

Просто используйте приведенный ниже код при создании объекта 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;
            }
        };
26 голосов
/ 27 февраля 2012

Я предполагаю, что вы не написали пользовательский CellRenderer для пути, а просто использовали DefaultTableCellRenderer.Вы должны создать подкласс DefaultTableCellRenderer и установить всплывающую подсказку в getTableCellRendererComponent.Затем установите средство визуализации для столбца.

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
...
0 голосов
/ 27 февраля 2012

Вы говорите, что храните абсолютный путь в ячейке.Вы, вероятно, используете JLabel для установки строки абсолютного пути .Предположим, у вас есть метка в вашей ячейке, используйте html-теги для выражения содержимого всплывающей подсказки:

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

setToolTipText() можно использовать для некоторых других компонентов Swing, если вы используете что-то отличное от JLabel.

...