我正在开发一个简单的计数器应用程序。我试图这样做,当你单击复选框时,它将保持在顶部,并显示一个消息对话框为“在顶部”或“不在顶部”。
但是,当我在编译和运行后单击该复选框时,会显示消息的两个,并且在两个消息上单击“确定”后,甚至都没有启用该复选框。如果我要删除showMessageDialog,它仍然可以正常运行,但我想学习如何正确实现它。
提前谢谢你。以下是该程序的所有代码:
public Class Counter {
JFrame frame;
JPanel panel;
JButton button, clear;
JTextField textC;
JLabel label;
JCheckBox cbox;
boolean topC = false;
int icount = 0;
String scount;
String topStatus = "";
public Counter() {
gui();
setActions();
}
public void gui() {
frame = new JFrame("Counter Program");
panel = new JPanel();
label = new JLabel("Counter");
textC = new JTextField();
textC.setPreferredSize(new Dimension(72,28));
textC.setEditable(false);
button = new JButton("Click");
clear = new JButton("Clear");
cbox = new JCheckBox("Top");
frame.setSize(350,80);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.add(panel);
panel.add(label);
panel.add(textC);
panel.add(button);
panel.add(clear);
panel.add(cbox);
frame.setVisible(true);
}
public void setActions() {
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
icount++;
scount = Integer.toString(icount);
textC.setText(scount);
}
});
clear.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
icount = 0;
textC.setText("");
}
});
cbox.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent e) {
topC = !topC;
if (topC) {
topStatus = "Top";
}
else topStatus = "Not Top";
frame.setAlwaysOnTop(topC);
JOptionPane.showMessageDialog(frame, topStatus, "Top Setting", 1);
}
});
}
public static void main(String[]args) {
new Counter();
}
}
答案 0 :(得分:1)
ItemListener生成两个事件,一个用于选择,一个用于取消选择(反之亦然)。如果您真的想使用ItemListener,请阅读How to Write an ItemListener上Swing教程中的部分以获取更多信息和工作exmaples。
否则,请改用ActionListener
,它只会生成一个事件。