Java Swing: Как получить уведомление, если подсказка станет видимой? - PullRequest
4 голосов
/ 22 июня 2011

У меня есть много компонентов, которые устанавливают подсказки с помощью JComponent.setToolTipText(...). Однако эти подсказки часто меняются в зависимости от многих событий. Я мог бы сделать вызов setToolTipText (...) каждый раз, когда происходит одно из этих событий; но я бы предпочел просто иметь прослушиватель подсказок, который уведомляет меня, когда подсказка собирается показать, чтобы я мог обновить подсказку, если это необходимо. Я не могу найти способ назначить слушателя подсказке, я его пропустил?

* Обратите внимание, мое решение должно быть совместимо с Java 1.4.2.

Ответы [ 3 ]

3 голосов
/ 22 июня 2011

На самом деле найдено достойное решение: переопределить JComponent.getToolTipText().

Один неприятный нюанс - это код из JComponent.setToolTipText ():

  public void setToolTipText(String text) {
        String oldText = getToolTipText();
        putClientProperty(TOOL_TIP_TEXT_KEY, text);
        ToolTipManager toolTipManager = ToolTipManager.sharedInstance();
        if (text != null) {
        if (oldText == null) {
                toolTipManager.registerComponent(this);
        }
        } else {
            toolTipManager.unregisterComponent(this);
        }
    }

Итак, если выпереопределите getToolTipText для возврата некоторого динамического значения, лучше вернуть null при первом вызове, иначе ваша подсказка не будет зарегистрирована в ToolTipManager.

2 голосов
/ 22 июня 2011

Я не уверен, что есть простой способ получить уведомление об этом событии.Тем не менее, похоже, что вам может понадобиться изменить свой дизайн.Необходимость обновления большого количества компонентов с постоянно меняющимися подсказками кажется странной и проблематичной.Может быть, просто добавьте универсальный MouseListener, который определяет сообщение для текущего компонента в текущий момент.Это избавит вас от необходимости постоянно менять все компоненты.

0 голосов
/ 12 мая 2016

Переопределите JComponent createToolTip (), это будет действовать как слушатель, всякий раз, когда собирается создать подсказку, этот метод вызывается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...