我有一个打开Jframe的程序。在这个Jframe中,我有一个按钮,打开另一个有Jframe的类。有没有办法获得新类,并在与第一帧相同的框架中打开新的gui,并删除第一帧中的现有内容?
这是第一堂课:
public class FirstFrame {
public FirstFrame() {
JFrame frame = new JFrame();
frame.setTitle("Title");
frame.setLayout(new BorderLayout());
frame.setSize(500,350);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Code for a button, that has an actionlistener wich opens the next
//class
frame.setVisible(true);
frame.setResizable(false);
}
public static void main(String[] args){
new FirstFrame();
}
}
第二堂课几乎就是这个。两帧之间的区别在于它们具有不同的内容。 当我运行我的程序时,一切正常,但我有两个窗口。此外,它在任务管理器中说这两个帧作为两个不同的程序运行。
有没有办法让内容甚至帧的名称发生变化,而不必处理两个不同的帧?
答案 0 :(得分:-1)
您可以更改JFrame
的内容窗格。我们假设您有两个JComponent
名为a
和b
。您初始化框架:
JFrame frame = new JFrame();
frame.setContentPane(a);
然后你可以打电话
frame.setContentPane(b);
更改内容。您可能还需要致电revalidate
和repaint
来刷新相框。
在下面的示例中,按下按钮会将JFrame
的内容从单JButton a
更改为JLabel b
。您可以使用任何JComponent
,例如JPanel
包含多个JComponent
。
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setTitle("Title");
frame.setSize(500, 350);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton a = new JButton("button A");
frame.setContentPane(a);
frame.setVisible(true); // calling setVisible after content pane has been set to refresh a frame
a.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JComponent b = new JLabel("label B");
frame.setContentPane(b);
frame.revalidate();
}
});
}