我正在使用带有ItemListener的JComboBox.更改值时,将调用itemStateChanged事件两次.第一个调用,ItemEvent显示所选的原始项目.第二次,它显示用户刚刚选择的项目.这是一些测试人员代码:
public Tester(){ JComboBox box = new JComboBox(); box.addItem("One"); box.addItem("Two"); box.addItem("Three"); box.addItem("Four"); box.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ System.out.println(e.getItem()); } }); JFrame frame = new JFrame(); frame.getContentPane().add(box); frame.pack(); frame.setVisible(true); }
因此,当我将组合框从"一"改为"三"时,控制台显示:
One Three
有没有一种方法我可以使用ItemEvent告诉它,它是第二项(即用户选择的项目)?如果有人可以解释为什么它被调用两次,那也会很好!
谢谢
看看这个来源:
import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Tester { public Tester(){ JComboBox box = new JComboBox(); box.addItem("One"); box.addItem("Two"); box.addItem("Three"); box.addItem("Four"); box.addItemListener(new ItemListener(){ public void itemStateChanged(ItemEvent e){ System.out.println(e.getItem() + " " + e.getStateChange() ); } }); JFrame frame = new JFrame(); frame.getContentPane().add(box); frame.pack(); frame.setVisible(true); } public static void main(String [] args) { Tester tester = new Tester(); } }
使用getStateChange确定是选择还是取消选择项
根据这个帖子,
当你离开一个结果时它会被触发,然后在设置为另一个结果时再次被调用
不要听itemStateChanged.请改用ActionListener,这对处理组合事件很有用.
如果需要根据所涉及的项目单独处理取消选择/选择,则需要ItemStateListener.更改itemStateChanged中项目的状态会导致itemStateChanged被触发...这称为"reentrance".
我想在选择后获取索引字符串并在组合框中设置
comboBox1.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { if(e.getStateChange() == ItemEvent.SELECTED) { comboBox1ItemStateChanged(); } } });
哟可以这样做:
import java.awt.event.*; jComboBox1.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.out.println("Hello"); } });
private void dropDown_nameItemStateChanged(java.awt.event.ItemEvent evt) { if(evt.getStateChange() == ItemEvent.SELECTED) { String item = (String) evt.getItem(); System.out.println(item); } }
祝好运!