在JTable中的单元格上方显示工具提示

时间:2010-02-03 17:05:11

标签: java swing jtable tooltip

当用户在其中输入错误的值时,我需要在单元格上方(或下方:)显示工具提示(请参见下图)。 我有一个工具提示,但我需要一个Point来显示它在正确的位置,所以我想获得一个单元格位置。你知道怎么做吗?

但是,如果你有一个更好的解决方案来实现这种行为,我对所有命题持开放态度(特别是因为工具提示没有与cell / Jtable / Panel绑定,如果我移动/关闭/ minmize我的窗口工具提示显示在同一位置)

alt text http://img246.imageshack.us/img246/6756/errorpopup.png

谢谢, 达明

5 个答案:

答案 0 :(得分:6)

请参阅下面的代码段,您将获得解决方案

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(...)方法的参数中的列参数更改为包含该单元格的特定列

答案 1 :(得分:2)

您在Swing组件可视指南中有an example of such feature

编辑:事实上,这并不是你需要的工具提示,因为工具提示需要将光标定位在单元格上。即使光标在单元格之外,您也希望显示工具提示,对吗?

无论如何,另一种解决方案是在用户输入的值无效时(例如橙色或红色)更改单元格的背景,然后添加“真实”工具提示(使用我提供的链接)为了给用户一个完整的错误信息。

答案 2 :(得分:2)

在创建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;
            }
        };

答案 3 :(得分:1)

尝试getCellRect

答案 4 :(得分:0)

如果使用RowSorter,请使用以下代码获取正确行的值:

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