2011-12-04 26 views
3

我已經擴展了JList以提供兩個單獨的功能,即項目的toolTipText和右鍵單擊選項。兩者都單獨工作,但是當我嘗試將它們一起使用時,MouseMoved事件未被識別?以下是我的新聽衆方法的內涵。我應該如何談判這些不同的事件?JList MouseMoved和MousePressed

public class JListTT extends javax.swing.JList { 
    public JListTT() { 
     super(); 
     addMouseListener(new ttListener()); 
... 
    class ttListener extends MouseAdapter { 
     public void mouseMoved(MouseEvent e) { 
      String nodeID = bldItemNodeID(); 
      theList.setToolTipText(nodeID); 
      } 
     public void mousePressed(MouseEvent ev) {check(ev); } 
     public void mouseReleased(MouseEvent ev) {check(ev); } 
     public void mouseClicked(MouseEvent ev) {check(ev); } 
     public void check(MouseEvent ev) { 
      if (ev.isPopupTrigger()) { 
       theList.setSelectedIndex(theList.locationToIndex(ev.getPoint())); 
       menu.show(theList, ev.getX(), ev.getY()); 
      } 
     } 
    } 
+0

請學習Java命名約定並嚴格遵守 – kleopatra

+0

@戴夫克萊默取悅爲什麼****你清理標籤之一, – mKorbel

回答

4

您添加ttListener對象作爲MouseListener的,但我沒有看到你添加ttListener對象作爲的MouseMotionListener。例如:

ttListener myMouseadapter = new ttListener(); 
addMouseListener(myMouseadapter); 
addMouseMotionListener(myMouseadapter); 
+0

我原本以爲加入一個addMouseListener將(新ttListener())將完成它的兩addMouseListener和addMouseMotionListener子類型,但我想這不是因爲這個作品!非常感謝。 – rikb

+0

@rikb:是的,MouseListener只偵聽靜態鼠標動作 - mousePress,mouseRelease,mouseClick等,而MouseMotionListener將偵聽動態鼠標事件。不客氣! –

+0

當你有機會時,請[標記此答案正確](http://meta.stackexchange.com/a/65088/155831)。 –

2

我沒有測試此我自己,但看的JList javadoc的工具提示功能現成可用的。的JList#getTooltipText的JavaDoc明確規定,以允許使用的 渲染器的提示,如果設置了文本

重寫JComponent的getToolTipText方法。

因此,如果您ListCellRenderer返回在其中將有一個tooltip它將被JList,而不需要一個聽衆來顯示getListCellRendererComponent方法Component

+0

+1使用現有的方法來設置工具提示 – camickr

1

那裏需要一個低級別的方法爲自定義下鼠標/ motionListener不一定:

  • 爲每個小區提示,看到@羅賓的答案
  • 作爲一個上下文菜單, JComonent有一個屬性componentPopupMenu:使用將配合鍵盤上打開菜單自動短切

「不一定」,因爲你似乎依賴於細胞上點擊右鍵來選擇的。如果是這樣,你仍然需要一個MouseListener的觸發選擇(長達十年的爭論之後,擺不 - 這似乎是不尋常的,當前的本地應用程序;-)

0

您可以通過使用的mouseDragged

實現它
YourClass extends JPanel implements MouseListener{ 
    ...... 

    @Override 
    public void mouseDragged(MouseEvent e) { 
     //code go here 

    } 
}