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