2011-02-11 33 views
3

我試過在JComboBox上使用getInputMap()+ getActionMap(),它似乎沒有效果。擺動:檢測在JComboBox中輸入?

我已經嘗試了JComboBox上的addActionListener()/ addItemListener(),我似乎無法區分從按下Return/Enter鍵的某個選擇的變化。

有什麼建議嗎?在我的應用程序中,我希望Return/Enter鍵比選擇更強大,這是一個選擇+應用操作。


這是我設置密鑰綁定的代碼。當組件是JList時,它可以正常工作(例如調用note("hit ENTER")),但在組件是JComboBox時不起作用。

private void setupApplyProfile(final JComponent component, final MyComboBoxModel mcbm) 
{ 
    String enterAction = "applyItem"; 
    KeyStroke enterKey = KeyStroke.getKeyStroke("ENTER"); 
    component.getInputMap().put(enterKey, enterAction); 
    component.getActionMap().put(enterAction, new AbstractAction() 
    { 
     @Override public void actionPerformed(ActionEvent e) { 
      note("hit ENTER"); 
      applySelectedProfile(mcbm); 
     } 
    }); 
} 
+0

你是如何使用getActionMap()? – jzd 2011-02-11 23:42:47

+0

見上面...... – 2011-02-15 15:03:28

回答

5

啊哈,這似乎工作:note("cb editor action")當我在組合框字段中按Enter鍵時被調用。

 comboBox.getEditor().addActionListener(new ActionListener() { 
      @Override public void actionPerformed(ActionEvent arg0) { 
       note("cb editor action"); 
      }    
     }); 
3

在我的應用程序,我想返回/回車鍵不僅僅是選擇更強,這是一個選擇+應用動作。

如果我沒有理解這個問題,你可以使用以下命令:

comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE); 

當從下拉列表中選擇一個項目,當您使用鼠標或輸入的動作事件和ItemEvents只會被解僱鍵。如果使用向上/向下箭頭鍵導航下拉列表,則eEvents不會被觸發。

+0

嗯。這幾乎是我想要的。事情是,我想創建一個事件,這個事件只能通過Return/Enter鍵觸發*,而不是通過鼠標選擇。換句話說,你從列表中選擇一個項目(或者輸入一個項目),然後按回車/確認(或者在我的對話框中點擊「應用」按鈕)應用項目。 – 2011-02-15 14:59:40