我想将项目添加到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());
}
}
答案 0 :(得分:2)
做一个简短的例子希望它有所帮助。
基本上只需将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();
}
});
}
}
答案 1 :(得分:1)
Combobox tutorial对此进行了解释。无需脏KeyListener
并检查回车键。
ActionListener
,当点击回车键时会触发该ActionListener
JComboBox patternList = new JComboBox(patternExamples);
patternList.setEditable(true);
patternList.addActionListener(this);
中,您可以更新模型或者更直接引用该教程
{{1}}
当用户从菜单中选择项目以及用户键入Enter时,可编辑的组合框会触发操作事件。请注意,当用户在组合框中输入值时,菜单保持不变。如果需要,您可以轻松编写一个动作侦听器,每次用户键入唯一值时,都会在组合框的菜单中添加新项。
答案 2 :(得分:1)
这甚至比这说的还要糟糕 - 似乎(来自使用Netbeans)keyTyped等事件根本不会触发。我想很多人都想知道为什么他们可以在JTextField上捕获java.awt.event.KeyEvent.getKeyChar()但是使用GUI Builder(在Netbeans中)的相应部分来获取JComboBox绝对没有任何东西!
<强> Handling Events on a Combo Box 强>
...
虽然JComboBox继承了为其注册侦听器的方法 低级事件 - 例如焦点,键和鼠标事件 - 我们 建议您不要在组合框上监听低级别事件。 原因如下:组合框是一个复合组件 - 它由组成 两个或更多其他组件。组合框本身就是高级别的 动作事件等事件。其子组件发射低级别事件 例如鼠标,键和焦点事件。低级别的事件和 触发它们的子组件依赖于外观。避免 编写依赖于外观的代码,你应该只听 复合组件(如组合框)上的高级事件。对于 有关事件的信息,包括有关事件的讨论 低级别事件,请参阅Writing Event Listeners。