2009-10-07 61 views
3

我有一個類似於JTree的自定義swing組件。它有一個使用CellRenderer呈現對象列表的ComponentUI。工具提示現在可以正確顯示每個呈現的單元格,但它不會像我想的那樣跟蹤鼠標。例如,如果我有這樣放置的盒子;Swing中的連續工具提示更新

 
[ box A ] [ box B ] [ box C ] [ box D ] 

如果我拖動鼠標,在這些箱子我會看到工具提示複選框中的在鼠標越過複選框中的邊界。隨着我繼續移動鼠標,工具提示將不會跟蹤指針。當我離開盒子時,工具提示會適當消失。當我穿過框B發生同樣的事情。

我的猜測是,當getToolTipText(MouseEvent event)的內容發生變化時,工具提示僅更新視圖。我想要的行爲是使工具提示跟蹤指針位置,而不管getToolTipText返回的內容。快速入門是基於對該方法的偶數/奇數次調用來添加和移除空白空間。這有效,但可能,這不可能是我應該這樣做的方式。

我正在尋找一種優雅的非破解方式來解決這個問題。我希望有人知道某個地方的某個奧術旗會迫使工具提示跟隨鼠標,而不管鼠標的內容如何。

回答

6

在您的單元格渲染器中重寫getToolTipLocation

+0

啊,甜!!!謝謝。我知道必須有一個簡單的方法,就是在我面前的整個時間。 – reccles 2009-10-07 15:21:36

+0

我實際上已將它作爲組件的一部分,而不是單元格渲染器。與細胞相比,這種行爲似乎更合適。 – reccles 2009-10-07 15:41:10

+0

我很高興它的工作! – 2009-10-07 15:50:25

0

我試圖使用getToolTipLocation設置工具提示的位置時指向JList的元素,但它沒有奏效。

插入斷點之後就出來了,在這樣的代碼:

public class DefinitionListCellRenderer extends JTextArea implements 
     ListCellRenderer, ComponentListener { 

... 

    @Override 
    public Point getToolTipLocation(MouseEvent event) { 
     Point pt = new Point(event.getX(), event.getY()); 
     return pt; 
    } 


... 

} 

getToolTipLocation甚至不叫!你能說,爲什麼? DefinitionListCellRenderer是列表上的單個項目(具有getListCellRendererComponent())。

+0

檢查以確保組件向工具提示提供者註冊: ToolTipManager.sharedInstance()。registerComponent(component); – reccles 2010-06-24 13:28:43