2014-11-14 54 views
1

我有一個swing組件,爲此我重寫了getToolTipText(MouseEvent)以獲取組件內不同鼠標位置的自定義工具提示。我想實現的是,某些鼠標位置不能顯示工具提示。切換動態工具提示 - java swing

當鼠標位於這些無效位置時,我嘗試在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()嗎?

回答

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); 
} 
+0

謝謝!我曾想過嘗試setToolTipText(null),但不確定要返回的內容。這完美的作品! – 2014-11-14 21:45:32