切换动态工具提示 - java swing

时间:2014-11-14 18:50:14

标签: java swing

我有一个swing组件,我已经重写了getToolTipText(MouseEvent)以获取组件中不同鼠标位置的自定义工具提示。我想要实现的是,不得为某些鼠标位置显示工具提示。

当鼠标位于这些无效位置时,我尝试在getToolTipText(MouseEvent)中返回null,但这会导致空指针异常。如果我返回一个空字符串,我在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 
    }
}

那么,如何根据组件中的鼠标位置动态启用/禁用工具提示?我应该尝试在组件的mouseMoved()中使用ToolTipManager.sharedInstance()。registerComponent()和unregisterComponent()吗?

1 个答案:

答案 0 :(得分:2)

根据the Swing tutorialthe documentation for JComponent.setToolTipText,将null传递给setToolTipText将关闭工具提示,因此您可以执行此操作:

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