2014-02-22 143 views
1

我想有一個動態的提示我JButton,所以我用這樣的覆蓋​​方法JButton的動態提示文本...沒有顯示

JButton myJButton=new JButton("My Button"){ 
    public String getToolTipText(MouseEvent evt){ 
     ToolTipManager.sharedInstance().setInitialDelay(100); 
     ToolTipManager.sharedInstance().setDismissDelay(60000); 

     return "Test Tip Here"; 
     } // Return plain text now, will be replaced by calculateTipText() later 
    }; 

當我有這樣的代碼,沒有工具提示完全顯示。

但是,如果我添加了這樣的另一條線......

myJButton.setToolTipText("Hi"); 

這點之後,提示將被正確地顯示爲Test Tip Here

爲什麼我的工具提示不起作用,直到我致電setToolTipText()

+0

好了,你覆蓋默認實現。它完全按照你所說的做了:返回'Test Tip Here'。 – Obicere

+0

http://www.michaelwilliams.co.za/simple-dynamic-tooltip-text-for-jcomponents-2/希望它能工作 – Simmant

回答

2

當您致電setToolTipText()時,在您的JButton上註冊了聽衆,允許顯示工具提示。當您撥打setToolTipText()時,這些收聽者僅在JButton上註冊,因爲在所有JButton s上只有一小部分實際上已設置了工具提示值時,無法偵聽工具提示。

覆寫​​方法將返回String指定,但前提是你(通過調用setToolTipText()法)登記在JButton第一個聽衆。

請參閱JButton源代碼here您可以在其中看到它設置了該值,然後將偵聽器註冊到ToolTipManager中。您可以註冊聽衆自己去達到你想要的東西,比如通過調用這個你創建按鈕後...

ToolTipManager.sharedInstance().registerComponent(myJButton); 
+0

感謝您的詳細信息,我沒有想到這種行爲,我想當我像上面那樣聲明我的JButton,它應該自動註冊一個監聽器。我修改了JList的代碼,當我聲明它與上面類似時,它自動註冊了一個監聽器。它足夠聰明,可以檢測到這一點。 – Frank