对 Java 和 Swing 非常陌生,我一直在玩 swing gui 应用程序。它为我的组合框生成了一些代码:
comboBox.addActionListener(EventHandler.create(ActionListener.class, TestController, "changeSomething"));
我也有这个:
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
public class StudyPlanController {
private JComboBox factors;
public void changeSomething() {
JOptionPane.showMessageDialog(null, "change!");
}
}
我有 2 个问题。
当我更改组合框中的选定项目时,我收到消息“更改!”只有第一次它被改变了。这是为什么?
在谷歌搜索解决方案时,所有用于设置监听器的代码都与为我生成的代码不同。例如
box.addItemListener(新的ItemListener(){ public void itemStateChanged(ItemEvent e){ System.out.println(e.getItem() + ""+ e.getStateChange() ); } });
我创建监听器的方式是否正确?为什么有两种方法可以做到这一点?
谢谢
最佳答案
对于 JComboBox是更好的工具ItemListener , 但这个 Listener总是调用两次 SELECTED
和 DESELECTED
,您可以检查事件是否为 SELECTED/DESELECTED
myComboBox.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
//some stuff
}
}
});
您可以使用 ActionListener ,但我建议使用它来更改自己的 JComboBox 的
属性或方法,而不是从 JComboBox
中删除,以在 GUI 的某个地方显示
您可以使用 EventHandler , 但最好先学习基础知识
关于Java swing 组合框只调用一次监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8560544/