首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的showMessageDialog会显示两次?

为什么我的showMessageDialog会显示两次?
EN

Stack Overflow用户
提问于 2018-04-27 22:50:05
回答 1查看 174关注 0票数 0

我正在做一个简单的计数器摇摆应用程序。我试图使它,所以当你点击复选框,它将停留在顶部,并显示一个消息对话框是“在顶部”或“不在顶部”。

但是,当我在编译和运行后单击复选框时,这两条消息都会显示,并且在两条消息上单击OK之后,复选框甚至都不会启用。如果我要删除showMessageDialog,它仍将正常工作,但我想学习如何适当地实现这一点。

提前谢谢你。以下是该程序的所有代码:

代码语言:javascript
复制
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();
    }
}
EN

回答 1

Stack Overflow用户

发布于 2018-04-27 22:52:22

ItemListener生成两个事件,一个用于选择,一个用于取消选择(反之亦然)。如果您真的想使用如何编写ItemListener,请阅读Swing教程中有关ItemListener的更多信息和工作实例。

否则,使用ActionListener代替,它将只生成一个事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50071180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档