我有一个包含大量项目的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侦听器,我尝试了同样的事情
我面临的问题是这个问题 当用户滚动打开下拉时,他无意中继续选择他不需要的每个项目。 (或者如果使用鼠标滚轮等...) 所以,我希望能够只捕获用户所做的选择。 怎么做到呢 ?
答案 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();
}
});