[英]How i handle keypress event for Jcombobox in java
我想將項目添加到JCombobox,該項目就是我在JCombobox中鍵入的要添加的項目。 此jCombox框是可編輯的。
我怎樣才能做到這一點。
好的,我嘗試為此JCombo框添加KeyPress事件,但不會重新放置
private void jbcBOXKeyTyped(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == 13) {
System.out.println("Keypress");
jbcBOX.addItem(jbcBOX.getSelectedItem().toString());
}
}
舉一個簡短的例子,希望對您有所幫助。
基本上只是將ActionListener
添加到JComboBox
,每當選擇或添加一個項目時,就會調用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();
}
});
}
}
在Combobox教程中對此進行了說明。 不需要臟的KeyListener
並檢查Enter鍵。
ActionListener
,當按下回車鍵時將觸發它 ActionListener
您可以更新模型 或者更確切地引用該教程
JComboBox patternList = new JComboBox(patternExamples);
patternList.setEditable(true);
patternList.addActionListener(this);
當用戶從菜單中選擇一個項目並且用戶鍵入Enter時,可編輯的組合框將觸發一個動作事件。 請注意,當用戶在組合框中輸入一個值時,菜單保持不變。 如果需要,您可以輕松編寫一個動作偵聽器,每次用戶鍵入一個唯一值時,該動作偵聽器就會在組合框的菜單中添加一個新項。
這甚至比說的還要糟糕-似乎(由於使用Netbeans)keyTyped等事件根本不會觸發。 我想象這里有很多人想知道為什么他們可以在JTextField上捕獲java.awt.event.KeyEvent.getKeyChar() ,但是將GUI Builder的核心部分(在Netbeans中)完全用於JComboBox,卻使他們一無所有!
...
盡管JComboBox繼承了為低級事件(例如焦點,鍵和鼠標事件)注冊偵聽器的方法, 但我們建議您不要在組合框上偵聽低級事件 。 原因如下:組合框是一個復合組件—它由兩個或多個其他組件組成。 組合框本身會觸發高級事件,例如動作事件。 它的子組件觸發低級事件,例如鼠標,鍵和焦點事件。 低級別事件和觸發它們的子組件與外觀有關。 為了避免編寫與外觀相關的代碼,您應該只偵聽復合組件(如組合框)上的高級事件。 有關事件的信息,包括有關高級別和低級別事件的討論,請參閱編寫事件偵聽器 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.