Как сделать так, чтобы окно JFrame появлялось только после нажатия кнопки JButton предыдущего окна JFrame?

Моя программа о супермаркете. Когда я компилирую программу, на экране появляются окна JFrame «f1» и «f2». Однако я хочу, чтобы сначала появилось окно JFrame «f1», а затем, после нажатия кнопки JButton «b1» окна «f1», я хочу, чтобы появилось окно JFrame «f2». Ниже приведен метод delivery() моей программы:

public static void delivery()
{
    final JFrame f1 = new JFrame("Name");
    GridLayout grid = new GridLayout(20, 40, 10, 8);
    f1.setLayout(grid);
    f1.setVisible(true);
    f1.setSize(600,200);
    f1.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f1.setLocation(700,450);

    JPanel p1 = new JPanel();

    final JLabel l1 = new JLabel("Enter your name: ");

    final JTextField jt1 = new JTextField(20);

    JButton b1 = new JButton("Ok");
    b1.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            input1 = jt1.getText();
            f1.dispose();
        }
    });

    p1.add(b1);
    p1.add(l1);
    p1.add(jt1);
    f1.add(p1);

    final JFrame f2 = new JFrame("Address");
    f2.setVisible(true);
    f2.setSize(600,200);
    f2.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    f2.setLocation(700,450);

    JPanel p2 = new JPanel();

    final JLabel l2 = new JLabel("Enter your address: ");

    final JTextField jt2 = new JTextField(20);

    JButton b2 = new JButton("Ok");
    b2.addActionListener(new ActionListener()
    {
        public void actionPerformed(ActionEvent e)
        {
            input2 = jt2.getText();
            f2.dispose();
        }
    });

    p2.add(b1);
    p2.add(l2);
    p2.add(jt2);
    f2.add(p2);

    JOptionPane.showMessageDialog(null, "The ordered stuff will be delivered to " +input1+ " who lives in: " +input2 , "Delivery" , JOptionPane.PLAIN_MESSAGE);
    JOptionPane.showMessageDialog(null, "Thank you for shopping at Paradise 24/7. Hope to see you again." , "Shopping Done!" , JOptionPane.PLAIN_MESSAGE);
}

person siddhu99    schedule 01.07.2013    source источник
comment
См. также Использование нескольких JFrames, хорошая/плохая практика?   -  person Andrew Thompson    schedule 01.07.2013


Ответы (3)


Строка кода, из-за которой появляется кадр, такова:

f1.setVisible(true);

У вас есть это для обоих кадров в вашем методе доставки.

Чтобы один отображался после другого, измените это так, чтобы один стал видимым, а другой был отключен в коде для кнопки, т.е. (вам, очевидно, придется объявить f2 перед этим)

 b1.addActionListener(new ActionListener()
{
    public void actionPerformed(ActionEvent e)
    {
        input1 = jt1.getText();
        f1.dispose();
        //f1.setVisible(false); // or dispose if you no longer need it
        f2.setVisible(true);
    }
});

Просто предложение: возможно, лучше использовать JDialog< /а>. Это позволит вам получить форму ввода, которую пользователь ожидает ответа, а затем запросить следующий ввод. Нажмите здесь, чтобы просмотреть руководство по диалоговым окнам

Вы также можете посмотреть на некоторые макеты при добавлении компонентов к вашим фреймам/панелям. GridLayout, BorderLayout, FlowLayout

person Java Devil    schedule 01.07.2013
comment
Я новичок в Java. На самом деле я понятия не имел о JFrame и ActionListener, но мне каким-то образом удалось узнать это через YouTube. Так что я не особо разбираюсь в Java. Я знаю только самые основы этого. - person siddhu99; 01.07.2013
comment
@ siddhu99 Тогда я бы порекомендовал уделить время прочтению учебников по Java и Создание графического интерфейса с помощью Swing - person MadProgrammer; 01.07.2013

Просто добавьте код f2.setVisible(true); в actionPerformed() кнопки.

Например,

f1.setBounds(whatever);
f2.setBounds(whatever);

//add button in JFrame and actionListener
f1.setVisible(true);
f2.setVisible(false);

actionPerformed(ActionEvent e)
{
     f2.setVisible(true);
}
person Vighanesh Gursale    schedule 01.07.2013

Затем вы должны сначала прочитать JavaDocs и прочитать некоторые хорошие электронные книги для начинающих по Java, такие как Java 2 Complete Reference, O'Really - Java Swing, будут вам полезны

person Vighanesh Gursale    schedule 01.07.2013