好的,我是听众的新手(仍在学习语言),这是我第一次全面尝试实现它们(即不仅仅是教科书中的练习题)。
到目前为止,除了一个大错误之外,一切都运行良好:复选框不会保持检查状态。我分配它们的ItemListener运行完美(我设置了一个JOptionPane来触发让我知道它是否正常工作),但是盒子本身并没有保持检查。
我甚至更进一步添加了条件逻辑,如果它的状态被检查而未经检查,并且发现当我单击该框时,两个状态都被触发。所以我得到了两个JOptionPane弹出窗口,一个带有消息的选项,如果选中该框,如果没有选中该框,则显示一个。
我在这里包含我的代码。我做错了什么?
PS。您会注意到代码具有条件逻辑,可以添加单选按钮或复选框。程序最终运行时,将以两种格式在多个位置生成此组件。单选按钮工作正常,这是我遇到上述问题的复选框。
创建复杂文件并指定听众的代码:
public OtherField(int voteFor){
this.voteFor = voteFor;
otherPanel = new JPanel();
otherPanel.setLayout(new GridLayout(1, 3));
otherField = new JTextField(10);
otherField.setHorizontalAlignment(SwingConstants.CENTER);
JLabel otherLabel;
otherLabel = new JLabel("Other", SwingConstants.CENTER);
otherRadio = new JRadioButton("", false);
otherRadio.setHorizontalAlignment(SwingConstants.CENTER);
otherRadio.addActionListener(new OtherFieldRadioListener());
otherCheckBox = new JCheckBox("");
otherCheckBox.setHorizontalAlignment(SwingConstants.CENTER);
otherCheckBox.addItemListener(new OtherFieldCheckBoxListener());
otherPanel.add(otherLabel);
otherPanel.add(otherField);
if(voteFor == 1){
otherPanel.add(otherRadio);
}else{
otherPanel.add(otherCheckBox);
}
}
LISTENER CODE(它是与上面代码在同一类中的私有类):
private class OtherFieldCheckBoxListener implements ItemListener{
public void itemStateChanged(ItemEvent e){
String name = otherField.getText();
if(e.getStateChange() == ItemEvent.SELECTED){
JOptionPane.showMessageDialog(null, name);
}else{
JOptionPane.showMessageDialog(null, "Not Selected");
}
}
}
答案 0 :(得分:0)
我要尝试的第一件事是在初始化时将复选框设置为true或false,即
otherCheckBox.setSelected(false)
如果这不起作用,我会检查每次选中复选框时是否从其他地方调用OtherField,从而重新绘制组件/重置选择(使用调试器并在OtherFields的开头设置断点)