2012-11-22 29 views
0

我想將項目添加到JCombobox中,該項目是我在JCombobox中輸入的項目,即要添加的項目。這個jCombox框是可編輯的。我如何在Java中處理Jcombobox的按鍵事件

我該怎麼做。

好吧,我tryied添加KeyPress事件對於這個JCombo框,但它並沒有respose

private void jbcBOXKeyTyped(java.awt.event.KeyEvent evt) { 

     if (evt.getKeyCode() == 13) { 
      System.out.println("Keypress"); 
      jbcBOX.addItem(jbcBOX.getSelectedItem().toString()); 
     } 
    } 
+0

它打印'按鍵'? – jlordo

+0

我爲退貨鑰匙寫過。我認爲它是正確的(返回鍵的keyCode 13),但它沒有 – Buddhi

+1

使用'KeyEvent.VK_ENTER'而不是'13'作爲返回鍵。 – jlordo

回答

2

做了一個簡短的例子,希望它有幫助。

基本上只是增加了ActionListenerJComboBox當選擇或添加項目時調用ActionListener。在ActionListener我們簡單地檢查是否存在當前選定的項目相匹配的項目,如果沒有的話,如果找到匹配,則什麼也不做的項目添加到JComboBox

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.SwingUtilities; 

public class EditableJComboBox { 

    public EditableJComboBox() { 
     initComponents(); 
    } 

    private void initComponents() { 
     JFrame frame = new JFrame("Editable JComboBox"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     String labels[] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J"}; 
     final JComboBox comboBox = new JComboBox(labels); 
     comboBox.setEditable(true); 

     comboBox.addActionListener(new ActionListener() { 
      private boolean found = false; 

      @Override 
      public void actionPerformed(ActionEvent actionEvent) { 
       String s = (String) comboBox.getSelectedItem(); 
       for (int i = 0; i < comboBox.getItemCount(); i++) { 
        if (comboBox.getItemAt(i).toString().equals(s)) { 
         found = true; 
         break; 
        } 
       } 
       if (!found) { 
        System.out.println("Added: " + s); 
        comboBox.addItem(s); 
       } 
       found = false; 
      } 
     }); 

     frame.add(comboBox); 

     frame.pack(); 
     frame.setVisible(true); 
    } 

    public static void main(String args[]) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       new EditableJComboBox(); 
      } 
     }); 
    } 
} 
+1

早上好(早上8點15分)!非常感謝David Kroukamp!是的,這是我想要的!乾杯! – Buddhi

+0

@Buddhi很樂意幫助 –

1

這在Combobox tutorial解釋。無需髒KeyListener s並檢查輸入密鑰。

  1. 你讓組合框編輯
  2. 您添加ActionListener當了輸入鍵擊
  3. 在這將觸發你的ActionListener可以更新模型

或者引用該教程更多從字面上

JComboBox patternList = new JComboBox(patternExamples); 
patternList.setEditable(true); 
patternList.addActionListener(this); 

當用戶從菜單中選擇一個項目並且用戶鍵入Enter時,可編輯的組合框會觸發一個操作事件。請注意,當用戶在組合框中輸入一個值時,菜單保持不變。如果您願意,您可以輕鬆編寫一個動作偵聽器,每當用戶鍵入一個唯一值時,就會向組合框的菜單中添加一個新項目。

1

它甚至比這說更糟 - 它似乎(從使用Netbeans)keyTyped等事件根本不會觸發。我猜想有很多人在這裏想知道爲什麼他們可以在JTextField上捕獲java.awt.event.KeyEvent.getKeyChar(),但是使用GUI Builder(在Netbeans中)的核心部分爲JComboBox完全沒有任何東西!

Handling Events on a Combo Box

...

雖然JComboBox中繼承的方法來註冊 低級事件監聽器 - 重點,關鍵,和鼠標事件,例如 - 我們 建議您不會聽組合框上的低級別事件。 原因如下:組合框是一個複合組件 - 它由兩個或更多的其他組件組成 。組合框本身觸發高級別事件,如動作事件。其子組件觸發低級事件 ,如鼠標,鍵和焦點事件。低級別事件和觸發它們的子組件是外觀和感覺相關的。爲避免 編寫與外觀相關的代碼,您應該只在組合框(例如組合框)上監聽 高級別事件。有關事件的信息,包括有關高級事件和 低級事件的討論,請參閱Writing Event Listeners。有關事件的信息,請參閱Writing Event Listeners