Java 如何仅在按enter键或更改JcomboBox中的选定项后触发事件

Java 如何仅在按enter键或更改JcomboBox中的选定项后触发事件,java,jcombobox,Java,Jcombobox,我有一个可编辑的JComboBox。我只需要在下列情况下触发事件 用户在键入时按enter键(这可以通过添加键事件侦听器实现)或 用户从列表中选择项目 在下面的代码中,事件在用户在编辑器中键入时触发,以及,如何避免用户键入时触发事件 comboForward.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if (e.getStateChang

我有一个可编辑的
JComboBox
。我只需要在下列情况下触发事件

  • 用户在键入时按enter键(这可以通过添加键事件侦听器实现)或
  • 用户从列表中选择项目
  • 在下面的代码中,
    事件在用户在编辑器中键入时触发,以及
    ,如何避免用户键入时触发事件

    comboForward.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                if (e.getStateChange() == ItemEvent.SELECTED) {
                   new Thread() {
                        @Override
                       public void run() {
                          // code after the event.
                        }
                    }.start();
                }
            }
        });
    

    我觉得这个适合你。试试看

    JFrame frame = new JFrame("Welcome!!");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JComboBox cmb = new JComboBox();
    cmb.setEditable(true);
    cmb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
    
        @Override
        public void keyReleased(KeyEvent event) {
            if (event.getKeyChar() == KeyEvent.VK_ENTER) {
                if (((JTextComponent) ((JComboBox) ((Component) event
                        .getSource()).getParent()).getEditor()
                        .getEditorComponent()).getText().isEmpty())
                    System.out.println("please dont make me blank");
            }
        }
    });
    frame.add(cmb);
    
    frame.setLocationRelativeTo(null);
    frame.setSize(300, 50);
    frame.setVisible(true);
    

    请参阅此处:

    我认为这适合您。试试看

    JFrame frame = new JFrame("Welcome!!");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JComboBox cmb = new JComboBox();
    cmb.setEditable(true);
    cmb.getEditor().getEditorComponent().addKeyListener(new KeyAdapter() {
    
        @Override
        public void keyReleased(KeyEvent event) {
            if (event.getKeyChar() == KeyEvent.VK_ENTER) {
                if (((JTextComponent) ((JComboBox) ((Component) event
                        .getSource()).getParent()).getEditor()
                        .getEditorComponent()).getText().isEmpty())
                    System.out.println("please dont make me blank");
            }
        }
    });
    frame.add(cmb);
    
    frame.setLocationRelativeTo(null);
    frame.setSize(300, 50);
    frame.setVisible(true);
    

    请参阅此处:

    但我无法检测到在用户从下拉列表中选择项之后触发的事件。combo.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.out.println(“Selected index=“+combo.getSelectedIndex()+”Selected item=“+combo.getSelectedItem());});此代码当您在combobox上选择某个项目时,您将获得所选项目。试一试。在这种情况下,当用户键入时会触发事件,这是我不希望发生的事情。发布的答案是针对密钥释放事件。没有键入。但是我无法检测到在用户从下拉列表中选择项之后触发的事件。combo.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){System.out.println(“Selected index=“+combo.getSelectedIndex()+”Selected item=“+combo.getSelectedItem());});此代码当您在combobox上选择某个项目时,您将获得所选项目。试一试。在这种情况下,当用户键入时会触发事件,这是我不希望发生的事情。发布的答案是针对密钥释放事件。未键入。如果用户从列表中选择一个项目,但未按enter键,会发生什么情况。。?事件是否会运行..?在这种情况下,我需要启动一个事件。我只想
    而不是
    在用户键入时触发事件。如果用户从列表中选择一个项目,但没有按enter键,会发生什么情况。。?事件是否会运行..?在这种情况下,我需要启动一个事件。我只想
    而不是
    在用户键入时触发事件。