我有一个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()吗?
答案 0 :(得分:2)
根据the Swing tutorial和the 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);
}