gpt4 book ai didi

java - 如何让 JCheckBox 按我想要的方式工作

转载 作者:行者123 更新时间:2023-12-01 13:49:32 26 4
gpt4 key购买 nike

我创建了一个带有微调器和复选框的工具栏。

旋转器按我的预期工作。当我更改该值时,将调用监听器并且微调器值也会更改。

但是,对于复选框,当我将其移到监听器上时(与微调器不同),监听器会被触发,并且奇怪的是,检查的值不会更改,除非我删除 JOptionPabe 语句。 CheckBox应该怎么写?

final JSpinner spin2 = new JSpinner();
spin2.setModel(new SpinnerNumberModel(10, 1, 3000, 1));
ChangeListener listener2 = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null,"Spinner change");
//show();
}
};
spin2.addChangeListener(listener2);
toolBar.add(spin2);

final JCheckBox AlertAudible = new JCheckBox("Audible");
AlertAudible.setSelected(true);
AlertAudible.setText("Audible");
AlertAudible.setForeground(Color.WHITE);
ChangeListener listener4 = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
// TODO Auto-generated method stub

JOptionPane.showMessageDialog(null,"Alert check");
//starterModule.sigmaAlertAudible = AlertAudible.isSelected();
//show();
}
};

好的,我将其更改为 ItemListener:

    ItemListener listener4 = new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {


if (e.getStateChange() == ItemEvent.SELECTED) {
JOptionPane.showMessageDialog(null,"Alert check SELECTED :"+e.getStateChange());

}
if (e.getStateChange() == ItemEvent.DESELECTED){
JOptionPane.showMessageDialog(null,"Alert check DESELECTED :"+e.getStateChange());


}
}
}

奇怪的是,每次我“选中”该框时,我的 JOptionPane 都会被调用两次!已选择和已取消选择。所以值(value)保持不变!

最佳答案

您需要按照建议使用 ItemListener,同时使用 SwingUtilities.invokeLater() 的下一个技巧,并且您的 JOptionPane 将仅被调用一次:

ItemListener listener4 = new ItemListener() {
@Override
public void itemStateChanged(final ItemEvent e) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
if (e.getStateChange() == ItemEvent.SELECTED) {
JOptionPane.showMessageDialog(null,"Alert check SELECTED :"+ e.getStateChange());
} else if (e.getStateChange() == ItemEvent.DESELECTED) {
JOptionPane.showMessageDialog(null,"Alert check DESELECTED :"+ e.getStateChange());
}
}
});

}
};

似乎是 bug

关于java - 如何让 JCheckBox 按我想要的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077694/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com