Java swing 下拉选择侦听器



我有一个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 ) ;
        }
    }
});

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

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

我面临的问题是,当用户滚动打开的下拉菜单时,他无意中不断选择他不需要的每个项目。

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

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 );
     }
}

我面临的问题是,当用户滚动打开的下降时 向下,他不经意地不断选择他不需要的每一件物品。

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

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());
        }
    }
});

请使用 ActionListeners,如下所示:

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

最新更新