Стеки вызовов JOptionPane - PullRequest
       13

Стеки вызовов JOptionPane

0 голосов
/ 24 декабря 2009

У меня небольшая проблема с панелью JOptionPane, которую я использую, чтобы предупредить пользователя, если найден неправильный ввод. Это работает правильно с первого раза. Но когда я закрываю JFrame, который вызывает этот JOptionPane, и открываю его снова, на этот раз он будет вызывать его дважды. И он будет складываться для каждого закрытия, которое я делаю.

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

Третий РЕДАКТИРОВАТЬ: Я нашел и решил проблему.

Хорошо, я предоставил код, который использую. Я сократил его, чтобы он показывал только нужный. Я не думаю, что это скомпилируется, но именно так я использую addActionListener ();

public class BorderLayoutDemo extends JFrame implements ActionListener {

    private JButton button1 = new JButton("L?gg till kund");
    private JButton button2 = new JButton("Ta bort kund");
    private JButton button3 = new JButton("Visa kund");
    private JButton button4 = new JButton("Lista alla kunder");
    private JButton button5 = new JButton("Avsluta");
    private JButton button6 = new JButton("Change");

    private JTextArea TextWindow = new JTextArea("Hej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\nHej\n");
    private JScrollPane scrollPane = new JScrollPane(TextWindow);   //l?gger in TextWindow s? att det f?r en scroll-bar

    private JPanel aPanel = new JPanel();
    private JFrame aFrame = new JFrame();

    private JTextField aTextfield1 = new JTextField();
    private JTextField aTextfield2 = new JTextField();

    private JButton aButton1 = new JButton("L?gg till kund");
    private JButton aButton2 = new JButton("St?ng");

    public BorderLayoutDemo() {

            setTitle("Bankregister");

            setLayout(new BorderLayout());

            JPanel panel = new JPanel();
            panel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 10));
            panel.setLayout(new GridLayout(6,1,55,5)); //row, cols, hgap, vgap

            button1.addActionListener(this);
            button2.addActionListener(this);
            button3.addActionListener(this);
            button4.addActionListener(this);
            button5.addActionListener(this);
            button6.addActionListener(this);

            panel.add(button1);
            panel.add(button2);
            panel.add(button3);
            panel.add(button4);
            panel.add(button5);
            panel.add(button6);

            JPanel panel2 = new JPanel();
            panel2.add(panel);

            add(panel2,BorderLayout.WEST);
            add(scrollPane,BorderLayout.CENTER);

            setJMenuBar(menu());

            setSize(600,300);

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            setLocationRelativeTo(null);
            setVisible(true);

    }

    public void addCustomer(boolean status) {


            if(status) {    

                aFrame.setTitle("L?gg till kund");
                aFrame.setSize(200,300);
                aFrame.setLayout(new GridLayout(3,1));

                aPanel.setLayout(new GridLayout(2,1)); //rad, kolumn

                aPanel.add(aTextfield1);
                aPanel.add(aTextfield2);

                aButton1.addActionListener(this);
                aButton2.addActionListener(this);
                System.out.println("Foo!!!!!!!!!!!!!");

                aFrame.add(aPanel);
                aFrame.add(aButton1);
                aFrame.add(aButton2);

                aFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                aFrame.setLocationRelativeTo(null);
                aFrame.setVisible(true);
            }
            else {

                aFrame.setVisible(false);


            }
    }

    public static void main(String[] args) {

        new BorderLayoutDemo();
    }

    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == button1) {
            setEnabled(false);
            addCustomer(true);
        }

        //IFs f?r addCustomer();
        else if(e.getSource() == aButton1) {

            if((aTextfield1.getText().isEmpty() || aTextfield2.getText().isEmpty())) {
                JOptionPane.showMessageDialog(null, "You miss to fill out the fields");
            }
            else {
                JOptionPane.showMessageDialog(null, "Added");
                Kund kund = new Kund(aTextfield1.getText(),aTextfield2.getText());
                setEnabled(true);
                register.add(kund);
            }
        }
        else if(e.getSource() == aButton2) {
            setEnabled(true);
            addCustomer(false);
        }

Ответы [ 2 ]

1 голос
/ 24 декабря 2009

Похоже, вы добавляете «прослушиватель проверки» каждый раз, когда открываете JFrame. Поэтому проверьте код «addListenerXXX», чтобы убедиться, что он добавляется / создается только один раз.

Что также приводит к вопросу, почему вы используете для этого JFrame? Обычно приложение имеет один JFrame. Затем, если вам нужно окно для ввода данных, вы создаете JDialog.

0 голосов
/ 24 декабря 2009

Передав null в качестве первого параметра этого метода, вы создаете JFrame по умолчанию, который JOptionPane использует в качестве родительского компонента, а не JFrame, который вы создали в своем коде. Если вы предоставите более подробную информацию в своем вопросе, я уверен, что кто-то здесь предоставит вам гораздо более подробный ответ.

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