2014-11-14 6 views
1

У меня есть компонент swing, для которого я переопределил getToolTipText (MouseEvent), чтобы получить настраиваемые подсказки для разных мест мыши в компоненте. Я хочу добиться того, что всплывающие подсказки не должны отображаться для определенных мест мыши.Toggling Dynamic Tooltip - java swing

Я попытался вернуть null внутри getToolTipText (MouseEvent), когда мышь находится в этих недопустимых местоположениях, но это вызывает исключение нулевого указателя. Если я верну пустую строку, я получаю ожидаемое поведение в OS X (всплывающая подсказка не отображается). Но пустая всплывающая подсказка отображается в Linux.

public String getToolTipText(MouseEvent evt) { 
    if(mouseInCorrectRegion(evt)) { 
     return "A tooltip!"; 
    } 
    else { 
     //No tooltip displayed on OS X, but 
     //empty tooltip displayed on Linux 
     return ""; 

     // return null; //Causes NPE randomly 
    } 
} 

Итак, как мне динамически включать/отключать всплывающие подсказки на основе местоположения мыши в компоненте? Должен ли я попытаться использовать ToolTipManager.sharedInstance(). RegisterComponent() и unregisterComponent() внутри mouseMoved() компонента?

ответ

2

Согласно the Swing tutorial и the documentation for JComponent.setToolTipText, проходя нуль на setToolTipText отключит подсказку, так что вы можете сделать это:

@Override 
public String getToolTipText(MouseEvent event) { 
    if (mouseInCorrectRegion(event)) { 
     setToolTipText("A tooltip"); 
    } else { 
     setToolTipText(null); 
    } 
    return super.getToolTipText(event); 
} 
+0

Спасибо! Я думал о попытке setToolTipText (null), но не знал, что вернуть. Это прекрасно работает! –