Как заставить всплывающую подсказку обновляться на TableCellRenderer, когда текст идентичен? - PullRequest
2 голосов
/ 02 ноября 2009

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

Если значения отличаются, всплывающая подсказка обновляется и отображается рядом с указателем мыши над ячейкой.

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

Кто-нибудь знает, как сделать так, чтобы всплывающая подсказка обновлялась в каждой ячейке, даже с одинаковыми значениями?

Ответы [ 3 ]

4 голосов
/ 02 ноября 2009

Я думаю, что вам лучше всего переопределить getToolTipLocation (MouseEvent) в вашем компоненте и заставить его отслеживать местоположение мыши. Если текст или расположение всплывающей подсказки изменились, подсказка будет обновлена.

1 голос
/ 25 декабря 2018

Попробуйте использовать 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();
1 голос
/ 02 ноября 2009

Добавить или удалить неразрывный пробел нулевой ширины?

...