Обнаружение всплывающей подсказки java - PullRequest
2 голосов
/ 08 февраля 2011

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

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Мое короткое расследование показало следующее.

Класс, ответственный за внешний вид всплывающей подсказки, - TootipManager.Все компоненты используют его общий экземпляр, поэтому этот менеджер одноэлементный.Вы не можете перехватить создание этого менеджера, и он не генерирует события, которые вы можете поймать.Но когда менеджер решает показать подсказку, он вызывает getToolTipText() из компонента.Итак, если вы хотите знать, что менеджер назвал его подклассом вашего компонента (JButton, JList и т. Д.), Переопределите метод getToolTipText() и используйте new Trowable().getStackTrace(), чтобы определить, что вас вызывают из TooltipManager.show()

Удачи

1 голос
/ 08 февраля 2011

Вы можете перезаписать метод createTooltip для вашего конкретного компонента, добавив элемент JTooltip , возвращающий ComponentListener .

Как пример:

   final ComponentListener customTooltipListener=new ComponentListener() {

        @Override
        public void componentHidden(ComponentEvent e) {
            // whatever you need on this event
        }

        @Override
        public void componentMoved(ComponentEvent e) {
            // whatever you need on this event
        }

        @Override
        public void componentResized(ComponentEvent e) {
            // whatever you need on this event

        }

        @Override
        public void componentShown(ComponentEvent e) {
            // whatever you need on this event

        }
    };          

    JButton button=new JButton("Command") {

        @Override
        public JToolTip createToolTip() {
            //keep default behaviour 
            JToolTip toReturn=super.createToolTip();
            toReturn.addComponentListener(customTooltipListener);
            return toReturn;
        }

    };

Этого должно быть достаточно.

...