Почему мой showMessageDialog отображается дважды? - PullRequest
0 голосов
/ 28 апреля 2018

Я работаю над простым приложением Counter Swing. Я пытаюсь сделать так, чтобы при установке флажка он оставался сверху и отображал диалоговое окно с сообщениями «Наверху» или «Не сверху».

Однако, когда я ставлю флажок после компиляции и запуска, отображаются оба сообщения , и после нажатия OK на обоих сообщениях флажок даже не включается. Если бы я удалил 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();
    }
}

1 Ответ

0 голосов
/ 28 апреля 2018

ItemListener генерирует два события, одно для выбора и одно для отмены выбора (и наоборот). Прочтите раздел из учебника Swing по Как написать ItemListener для получения дополнительной информации и рабочих примеров, если вы действительно хотите использовать ItemListener.

В противном случае используйте ActionListener, вместо этого будет сгенерировано только одно событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...