2016-08-02 56 views
0

我想在用戶單擊(使用鼠標)JComboBox中的項目時調用一個函數;然而,我不希望爲任何鍵盤事件觸發此事件 - 我只希望點擊某個特定單元格的下拉菜單(我知道addActionListener和addItemListener,但是這些會被觸發以獲取比我想要的更多的事件)。JComboBox mouseClicked單元格

編輯:我應該指定mouseClicked不工作 - 沒有事件似乎被解僱(但是,他們是在一個點上,但是當發生這種情況時,他們也解僱了點擊文本字段),但我認爲這是從標題中推斷出來的。

我自己也嘗試這裏給出(也不起作用)解決方案:Editable JCombobox mouseclicked event not working

EDIT2:我嘗試以下,但點擊仍無輸出:

try { 
    Field popupInBasicComboBoxUI = BasicComboBoxUI.class.getDeclaredField("popup"); 
    popupInBasicComboBoxUI.setAccessible(true); 
    BasicComboPopup popup = (BasicComboPopup)popupInBasicComboBoxUI.get(attachedCB.getUI()); 

    Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller"); 
    scrollerInBasicComboPopup.setAccessible(true); 
    JScrollPane scroller = (JScrollPane)scrollerInBasicComboPopup.get(popup); 

    scroller.getViewport().getView().addMouseListener(new MouseAdapter() { 
     @Override 
     public void mouseClicked(MouseEvent e) { 
     super.mouseClicked(e); 
     System.out.println("nope"); 
     } 
    }); 
    } 
    catch (IllegalAccessException e) { 
    e.printStackTrace(); 
    } 
    catch (NoSuchFieldException e) { 
    e.printStackTrace(); 
    } 
+0

您需要的的MouseListener添加到彈出不JComboBox時爲例指出這裏:http://engin-tekin.blogspot.com/2009/10/hrefhttpkfd.html你試試這個,它沒有工作?如果是的話,你在哪裏使用不同的LAF? – Jayfray

+0

查看編輯2,沒有工作:( – user235236

+0

嘗試添加監聽器從popup.getList() – Jayfray

回答

2

您錯過了將它添加到我在評論中發佈的鏈接中的scrollPane的視口視圖。

Field scrollerInBasicComboPopup = BasicComboPopup.class.getDeclaredField("scroller"); 
scrollerInBasicComboPopup.setAccessible(true); 
JScrollPane scroller = (JScrollPane) scrollerInBasicComboPopup.get(popup); 
scroller.getViewport().getView().addMouseListener(listener); 
+0

我曾嘗試過,仍然沒有;滿的代碼是在編輯2 – user235236

+0

我沒有得到一個mouseClicked,但我得到一個mousePressed和mouseReleased事件,你將需要使用這些更改您的mouseAdapter使用mousePressed和/或mouseReleased方法 – Jayfray

+0

優秀!這將工作! – user235236

0

希望這有助於

jComboBox.addMouseListener(new java.awt.event.MouseAdapter() { 
      public void mouseClicked(java.awt.event.MouseEvent evt) { 
       jComboBoxMouseClicked(evt);//your logic here 
      }    
     }); 
+0

不幸的是,這正是我所嘗試過的......沒有任何反應 – user235236

0

您應該使用java.awt.event.ActionEvent中,這是(從javadoc中引述)一

語義事件,表示發生了組件定義的動作 。通過當特定於組件的動作發生的組件(如一個按鈕 )(如被 按下)生成此高級別活動...

這樣的:

 jComboBox.addActionListener(new java.awt.event.ActionListener() { 
      public void actionPerformed(java.awt.event.ActionEvent evt) { 
       javax.swing.JComboBox source = (javax.swing.JComboBox)evt.getSource(); 
       // use getSelectedIndex to know the item if needed 
       labelTextField.setText(source.getSelectedItem().toString()); 
      } 
     }); 

注意:getSelectedItemgetSelectedIndexgetSelectedObjects方法:這可以讓你知道哪些項目已被選中,你想

只處理項目
+0

這也觸發了鍵盤事件,這是不可接受的 – user235236

相關問題