Java swing下拉选择监听器

时间:2017-06-15 18:53:09

标签: java swing events listener

我有一个包含大量项目的JCombobox。选择一个项目后,我需要做一些事情。 我尝试使用actionListener和itemListner

myComboBox.addItemListener(new ItemListener(){
        @Override
        public void itemStateChanged(ItemEvent e) {
        if (e.getStateChange() == ItemEvent.SELECTED) {
            String selection = (String)myComboBox.getSelectedItem();
            System.out.println("Selected: "+selection ) ;
        }
    }
});

使用Action侦听器,我尝试了同样的事情

我面临的问题是这个问题 当用户滚动打开下拉时,他无意中继续选择他不需要的每个项目。 (或者如果使用鼠标滚轮等...) 所以,我希望能够只捕获用户所做的选择。 怎么做到呢 ?

3 个答案:

答案 0 :(得分:2)

  

我遇到的问题是当用户滚动打开下拉时,他无意中继续选择他不需要的每个项目。

您可以使用以下命令阻止侦听器触发:

comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);

例如:

/*
    This works on non editable combo boxes
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.plaf.basic.*;
import javax.swing.text.*;

public class ComboBoxAction extends JFrame implements ActionListener
{
    public ComboBoxAction()
    {
        JComboBox<String> comboBox = new JComboBox<String>();
        comboBox.addActionListener( this );

        comboBox.addItem( "Item 1" );
        comboBox.addItem( "Item 2" );
        comboBox.addItem( "Item 3" );
        comboBox.addItem( "Item 4" );

        //  This prevents action events from being fired when the
        //  up/down arrow keys are used on the dropdown menu

        comboBox.putClientProperty("JComboBox.isTableCellEditor", Boolean.TRUE);

        getContentPane().add( comboBox );
        getContentPane().add( new JTextField(), BorderLayout.SOUTH );
    }

    public void actionPerformed(ActionEvent e)
    {
        System.out.println( e.getModifiers() );

        JComboBox comboBox = (JComboBox)e.getSource();
        System.out.println( comboBox.getSelectedItem() );

        //  make sure popup is closed when 'isTableCellEditor' is used

//      comboBox.hidePopup();
    }

    public static void main(String[] args)
    {
        ComboBoxAction frame = new ComboBoxAction();
        frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
        frame.pack();
        frame.setVisible( true );
     }
}

答案 1 :(得分:1)

  

问题,我面临的是当用户滚动打开掉落时   他不经意地继续选择他不需要的每件物品。

原因是,当按下arraw上下时,它也是状态变化。所以我的解决方案是您可以添加keyTyped actionListener。然后你可以得到箭头键的代码并检查arraw press。如下所示:

myComboBox.addKeyListener(new java.awt.event.KeyAdapter() {
    public void keyTyped(java.awt.event.KeyEvent evt) {
        String x = String.valueOf(myComboBox.getSelectedItem());

        if(evt.getKeyCode() == 40) {
            System.out.println(x);
            //System.out.println(evt.getKeyCode());
        }
    }
});

答案 2 :(得分:0)

请使用ActionListeners,如下所示:

combo.addActionListener (new ActionListener () {
    public void actionPerformed(ActionEvent e) {
       // doSomething();
    }
});