Как сделать, чтобы по нажатию кнопки в одной форме, данная форма закрылась и открылась другая?

Рейтинг: 1Ответов: 2Опубликовано: 02.05.2011

Есть 2 формы JFrame (назовем их form1 и form2). Как сделать, чтобы по нажатию кнопки в одной форме, данная форма закрылась и открылась другая? Правильно ли будет сделать так — при нажатии на кнопку, установить form1.setVisible(false) и следующая строчка кода form2 = new JFrame();?

Ответы

▲ 4

Давайте начнем разбираться :)

где-то в коде должно появиться примерно следущие:

JFrame form1 = new JFrame("form1");
JButton button = new JButton("visible");
form1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
form1.setSize(350,150);
form1.add(button);
form1.setVisible(true);

//а теперь главное - обработчик событий кнопки
    button.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
              //а вот тут как раз код чего делать при нажатии на кнопку
              //в самом простом виде следующие:
              JFrame form2 = new JFrame("form2");
              form2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              form2.setSize(350,150);
              //не видим первую форму
              form1.setVisible(false);
              //открываем вторую
              form2.setVisible(true);
         }
    });

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

▲ 3

Все рисование библиотеки Swing происходит в отдельном потоке. Поэтому будет лучше и свое рисование переносить в этот поток. Это достигается при помощи создания анонимного класса и передачи его как параметра в метод invokeLater библиотеки Swing.

java.awt.EventQueue.invokeLater(new Runnable() 
{
   run() {

     form1.setVisible(false);
     form2.setVisible(true);

}