如何将工具提示添加到jtable中的单元格?

Pan*_*ian 18 java swing jtable tooltip listener

我有一张表,每行代表一张图片.在路径I中,存储其绝对路径.字符串有点长,我想当我将鼠标悬停在特定单元格上时,工具提示应弹出包含来自单元格的信息的鼠标旁边.

小智 36

只需在创建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;
            }
        };
Run Code Online (Sandbox Code Playgroud)

  • 使用getRowSorter()。convertRowIndexToModel(rowIndex)和getRowSorter()。convertRowIndexToModel(rowIndex)从模型中获取确切的行。 (2认同)

Hau*_*idt 27

我假设你没有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
...
Run Code Online (Sandbox Code Playgroud)

  • @codenamezero为什么不呢?您知道在示例代码中我将子类化为DefaultTableCellRenderer,它以非抽象的方式使用该方法并且本身就是一个`JLabel`? (2认同)