我如何在java中处理Jcombobox的keypress事件

时间:2012-11-22 18:01:23

标签: java swing jcombobox

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

3 个答案:

答案 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并检查回车键。

  1. 您可以使组合框可编辑
  2. 添加ActionListener,当点击回车键时会触发该ActionListener
  3. JComboBox patternList = new JComboBox(patternExamples); patternList.setEditable(true); patternList.addActionListener(this); 中,您可以更新模型
  4. 或者更直接引用该教程

    {{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