2016-12-21 5 views
-1

Я знаю, что это спрашивали тысячи раз, но я никогда не нашел ответа, который работает на меня. Я использую Java IDE для разработчиков Java (Eclipse Kepler).Закрытие JFrame через JButton при открытии нового JFrame

Мне нужно, чтобы JButton, щелкнув по нему, закроет JFrame, что кнопка включена, и открывает новый, который существует в другом классе. У меня есть это:

 JButton button = new JButton("Click Me!"); 
 
     add(button); 
 
     
 

 
     button.addActionListener(new ActionListener() 
 
     { 
 
      public void actionPerformed(ActionEvent e) { 
 

 
      } 
 
     }); 
 
     
 
    }

Я понятия не имею, что ставить после actionPerformed. И frame.dispose(); не работает для меня.

Я спрашиваю, как закрыть JFrame с помощью JButton, и нажав ту же кнопку, он также откроет JFrame нового класса?

+1

'frame.setVisible (ложь),' должен работать, если 'frame' переменная фактически указывает на надлежащее окно. Чтобы открыть новый JFrame, вызовите 'setVisible (true)' на нем. – markspace

+0

Сначала вам нужно создать новый JFrame, а затем удалить текущий кадр. –

+0

Это только делает содержимое кадров невидимым. – Fletch614

ответ

0

Вот пример, который может помочь:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 

import javax.swing.*; 

public class MyFrame extends JFrame { 

    public MyFrame() { 

     setLayout(new BorderLayout()); 
     getContentPane().setPreferredSize(new Dimension(400, 250)); 

     JButton btn = new JButton("Click Me"); 
     btn.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
       setVisible(false); 

       JFrame frame2 = new JFrame(); 
       frame2.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame2.setLocation(300, 150); 
       frame2.add(new JLabel("This is frame2.")); 
       frame2.setVisible(true); 
       frame2.setSize(200, 200); 

      } 
     }); 
     add(btn,BorderLayout.SOUTH); 

    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       MyFrame frame = new MyFrame(); 
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE); 
       frame.pack(); 
       frame.setLocation(150, 150); 
       frame.add(new JLabel("This is frame1."), BorderLayout.NORTH); 
       frame.setVisible(true); 
      } 
     }); 
    } 
} 
+1

ДА! Это прекрасно работает! Большое спасибо! Вы спасатель жизни – Fletch614

Смежные вопросы