2011-03-01 77 views
3

我想在用戶將鼠標懸停在列表中的項目上時顯示包含信息的框。喜歡的東西如下:在jlist中懸停項目的顯示框

enter image description here

我怎樣才能做到這一點?這可以在像pidgin或spark這樣的聊天應用程序中看到。

回答

1

也許您正在使用像功能一樣的工具提示。如果是這樣,請考慮提供一個ListCellRenderer組件(如JLabel),並設置JLabel的工具提示。

E.G.在工具提示中使用HTML呈現。

import javax.swing.*; 

class LabelWithHtmlTooltip { 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      public void run() { 
       String html = "<html><body>" + 
        "<h1>Header</h1>" + 
        "<img src='http://pscode.org/media/starzoom-thumb.gif' " + 
        "width='160' height='120'>"; 
       JLabel label = new JLabel("Point at me!"); 
       label.setToolTipText(html); 
       JOptionPane.showMessageDialog(null, label); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

@Andrew:請您詳細說明您的答案? – 2011-03-02 10:00:02

+0

哪一部分,具體? – 2011-03-02 11:20:58

+0

@Andrew:\t 如果我設置了JLabel的ToolTip,那麼它將只顯示文本。但我想要懸停的文本和圖像 – 2011-03-02 13:09:03

1

下面是我想嘗試實現它:

添加的MouseListener和MouseMotionListener和你的JList。當模糊器進入列表中時,啓動一個等待某個延遲(半秒)的線程。當鼠標移動或拖動時,重新開始等待延遲。當鼠標退出JList時,取消該線程。使用這些監聽器也可以跟蹤鼠標位置。

一旦達到延遲時間(這應該意味着鼠標停留在列表中,而不移動整個延遲),然後使用SwingUtilities.invokeLater顯示信息框。您可以使用JList的locationToIndex來確定鼠標懸停在哪一行。