Не удается отключить всплывающие подсказки для текстовой области на панели прокрутки

Все компоненты Swing в моем приложении (кроме ярлыков) имеют всплывающие подсказки, которые могут раздражать, когда пользователь знает, что происходит, поэтому у меня есть Preferences меню, которое позволяет отключить их. Я мог бы назвать каждый компонент и установить его текст подсказки на "" [например, txtPattern.setToolTipText("");] (и еще 10), но я решил (с помощью SO, которая началась некоторое время назад) написать код, который был бы более элегантным (опыт обучения):

  private void tipsOff(Container container){

    Component [] c = container.getComponents();

    for (Component cc : c)
      ((JComponent)cc).setToolTipText("");
  }  

  private void mniPrefTooltipsActionPerformed(java.awt.event.ActionEvent evt) {                                                

    if(! mniPrefTooltips.isSelected()){
       tipsOff(gui.getContentPane());
       tipsOff(gui.pnlLetters);
       tipsOff(gui.mbrMenuBar);
    }
    else{
      gui.dispose();
      gui = new IO();
      gui.setVisible(true);
    }
  }                                               

У меня есть проблема, которая заключается в том, что всплывающие подсказки НЕ отключены для двух больших текстовых областей в нижней части графического интерфейса (выделено на панели навигатора). Две кнопки (отмеченные зеленым на панели навигации) обрабатываются правильно. Эти предметы должны быть обработаны через первый звонок tipsOffкакие процессы gui.getContentPane()),

(Я добавил две строки ниже, чтобы попытаться исправить проблему. Нет.)

tipsOff(gui.scrOutput); 
tipsOff(gui.scrScratch);

(Также попробовал это. Нет.)

   tipsOff(gui.txaOutput);
   tipsOff(gui.txaScratchwork);

Как я могу элегантно (т.е. предположить, что у меня много текстовых областей, а не только 2) отключить всплывающие подсказки текстовой области?

PS я получаю сообщение Access of private field of another object для всех, кроме первого звонка tipsOff, Мне все равно, в связи с характером поставленной задачи.

1 ответ

Решение

Использование ToolTipManager.sharedInstance().setEnabled( false ) отключить все подсказки в вашем приложении Swing.

Преимущества по сравнению с вашим подходом

  • Оно работает:-)
  • Вы не очищаете всплывающие подсказки, поэтому их легко снова включить. Например, если вы хотите предложить пользовательский интерфейс для активации / деактивации подсказок, этот подход будет работать. При вашем подходе вам придется восстанавливать все ранее очищенные всплывающие подсказки, что будет сложно сделать в общем виде.
Другие вопросы по тегам