2011-02-08 3 views
2

Привет, Есть ли способ обнаружить запуск подсказки на компоненте swing в Java? Не могу даже подумать, с чего начать с этого. веселитОбнаружить запуск toolTip java

+4

Можете ли вы подумать, чтобы объяснить реальную цель здесь? Это часто более продуктивно, чем спрашивать, как достичь ошибочной стратегии, направленной на достижение действительной цели, что вполне может быть. –

+0

Цель состоит в том, чтобы обнаружить, когда всплывающая подсказка запущена и как долго она просматривается, чтобы я мог регистрировать эти данные, поскольку это часть исследовательской платформы, которую мы с моей командой пишем – Alex

ответ

1

Вы можете перезаписать метод 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; 
     } 

    }; 

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

+0

+1 Творческий ответ! знак равно – Uhlen

1

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

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

Удачи.

Смежные вопросы