0

我想将项目添加到 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());
        }
    }
4

3 回答 3

2

做了一个简短的例子希望它有所帮助。

基本上,只要选择或添加一个项目,ActionListener就会调用它。在我们简单地检查是否有一个项目与当前选定的项目匹配,如果没有,则将项目添加到如果找到匹配则什么都不做:JComboBoxActionListenerActionListenerJComboBox

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();
            }
        });
    }
}
于 2012-11-22T18:32:01.927 回答
1

这在Combobox 教程中进行了解释。不需要脏KeyListeners 并检查 enter 键。

  1. 您使组合框可编辑
  2. 您添加一个ActionListener将在按下回车键时触发的
  3. 在你的ActionListener你可以更新模型

或者更直接地引用该教程

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

当用户从菜单中选择一个项目并且用户输入 Enter 时,一个可编辑的组合框会触发一个动作事件。请注意,当用户在组合框中输入值时,菜单保持不变。如果您愿意,您可以轻松编写一个动作侦听器,每次用户键入一个唯一值时,它都会向组合框的菜单中添加一个新项目。

于 2012-11-22T18:19:10.017 回答
1

它甚至比这更糟糕 - 似乎(来自使用 Netbeans)keyTyped 等事件根本不会触发。我想很多人都想知道为什么他们可以在 JTextField 上捕获java.awt.event.KeyEvent.getKeyChar()但使用 GUI Builder 的对应部分(在 Netbeans 中)为 JComboBox 完全没有得到他们!

处理组合框上的事件

...

尽管 JComboBox 继承了为低级事件(例如焦点、键和鼠标事件)注册侦听器的方法,但我们建议您不要在组合框上侦听低级事件。原因如下:组合框是一个复合组件——它由两个或多个其他组件组成。组合框本身会触发高级事件,例如动作事件。它的子组件触发低级事件,例如鼠标、键和焦点事件。低级事件和触发它们的子组件依赖于外观。为避免编写依赖外观的代码,您应该只侦听复合组件(如组合框)上的高级事件。有关事件的信息,包括关于高级和低级事件的讨论,请参阅编写事件侦听器.

于 2016-04-07T17:23:15.583 回答