当文本相同时,如何强制工具提示在TableCellRenderer上更新?

时间:2009-11-02 14:24:56

标签: java swing jtable tooltip

在Java程序中,我正在为JTable中的单元格使用自定义渲染器。 在此渲染器上,我设置了一个工具提示,其内容取决于当前单元格。

当值不同时,工具提示会更新,并显示在鼠标指针旁边的单元格上。

但是,当更改单元格时,此工具提示的文本相同(发生了一些单元格具有相同的工具提示文本),TooltipManager认为工具提示未更改,并且它保留了上一个工具提示,以前的职位。

有人知道如何制作它以便在每个单元格上更新工具提示,即使是相同的值吗?

3 个答案:

答案 0 :(得分:4)

我认为您最好的选择是覆盖组件中的getToolTipLocation(MouseEvent),并让它跟踪鼠标的位置。如果工具提示的文本或位置已更改,则工具提示将更新。

答案 1 :(得分:1)

添加或删除零宽度,不间断的空格?< / hack>

答案 2 :(得分:1)

尝试使用CellStyle进行工具提示更新:

@Override
public CellStyle getCellStyleAt(int row, int column) {
        Object property = super.getPropertyAt(row);
        String description = property instanceof Property ? ((Property) property).getDescription() : null;
        if (!StringUtils.isBlank(description)) {
            if (description.length() > splitLength) { // Automatically split long descriptions, store results in cache map.
                String splitString = descriptionToSplit.get(description);
                if (null == splitString) {
                    splitString = StringUtils.splitToRows(description, splitLength);
                    descriptionToSplit.put(description, splitString);
                }
                cellStyle.setToolTipText(splitString);
            } else { // Optimization for short descriptions.
                cellStyle.setToolTipText(description);
            }
        } else { // If description is empty, use display name instead.
            String name = property instanceof Property ? ((Property) property).getDisplayName() : null;
            cellStyle.setToolTipText(name);
        }
        return cellStyle;
    }

    @Override
    public boolean isCellStyleOn() {
        return true;
    }

    private static final CellStyle cellStyle = new CellStyle();