Показать подсказку над ячейкой в ​​JTable - PullRequest
6 голосов
/ 03 февраля 2010

Мне нужно показать всплывающую подсказку над (или под :) ячейкой, когда пользователь вводит в нее неправильное значение (см. Изображение ниже). У меня есть всплывающая подсказка, но мне нужна точка, чтобы отобразить ее в правильном положении, поэтому я хочу получить положение ячейки. Вы знаете, как это получить?

НО, если у вас есть лучшее решение для реализации этого поведения, я открыт для всех предложений (особенно для того факта, что всплывающая подсказка не связана с ячейкой / Jtable / Panel и если я перемещаю / закрываю / уменьшаю размер окно подсказки отображается в той же позиции)

alt text

Спасибо, Дэмиен

Ответы [ 5 ]

6 голосов
/ 14 февраля 2012

Пожалуйста, обратитесь к фрагменту кода ниже, и вы получите решение

JTable table = new JTable() {
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {
        Component c = super.prepareRenderer(renderer, row, column);
        if (c instanceof JComponent) {
            JComponent jc = (JComponent) c;
            jc.setToolTipText(getValueAt(row, column).toString());
        }
        return c;
    }
};

Если вы хотите показать только определенную ячейку, все, что вам нужно сделать, это изменить параметр столбца в параметрах getValueAt(...) метод для определенного столбца, который содержит эту ячейку

2 голосов
/ 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 {
                    //comment row, exclude heading
                    if(rowIndex != 0){
                      tip = getValueAt(rowIndex, colIndex).toString();
                    }
                } catch (RuntimeException e1) {
                    //catch null pointer exception if mouse is over an empty line
                }

                return tip;
            }
        };
2 голосов
/ 03 февраля 2010

У вас есть пример такой функции в визуальном руководстве по компонентам Swing.

Edit: На самом деле, это не та подсказка, которая вам нужна, так как подсказка должна располагать курсор над ячейкой. Вы хотите отобразить всплывающую подсказку, даже если курсор находится за пределами ячейки, верно?

В любом случае, альтернативное решение состоит в том, чтобы изменить фон ячейки, когда введенное пользователем значение недопустимо (например, оранжевым или красным), а затем добавить «реальную» подсказку (используя предоставленную мной ссылку) в чтобы дать пользователю полное сообщение об ошибке.

1 голос
/ 03 февраля 2010

Попробуйте getCellRect

0 голосов
/ 30 января 2013

Используйте следующий код, чтобы получить значение для правильной строки при использовании RowSorter:

jc.setToolTipText(getValueAt(convertRowIndexToModel(row), column).toString());
...