【发布时间】:2022-01-10 05:49:32
【问题描述】:
很遗憾,我无法在任何地方找到问题的答案。
这是我的程序:
import javax.swing.*;
import java.awt.*;
public class TestClass {
public static void main(String[] args) {
JFrame window = new JFrame("Window");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setResizable(false);
JPanel panel = new JPanel();
panel.setLayout(new GridLayout(1,1));
JButton button = new JButton("Button");
button.addActionListener(e -> windowPreparation(window));
panel.add(button);
window.add(panel);
window.setSize(800, 600);
window.setVisible(true);
}
private static void windowPreparation(JFrame window) {
window.removeAll();
window.validate();
window.repaint();
}
}
我想要实现的目标:按下按钮后,JFrame 应该被重置(我想用那个按钮删除那个 JPanel),以便我可以将它传递给另一个类,然后用这个 JFrame 做其他事情. 为了让这个类可以毫无问题地做到这一点,我想事先清除 JFrame。 我刚刚尝试过,因为它是写在我的代码中的,问题是它不起作用,只要我按下按钮,窗口就会冻结。有谁知道我做错了什么?
【问题讨论】:
-
使用为此类事情设计的
CardLayout。 -
你的“基本”问题是,
JFrame是一个复合组件。也就是说,有许多其他组件构成了它的基本结构。所以removeAll实际上是在删除所有其他你不想做的组件。相反,您应该以getContentPane().removeAll()开头。话虽如此,我很想简化问题并将框架排除在等式之外,并拥有一个用作基本容器的“主容器”。但如果没有更多细节,我同意 Andrew,请改用CardLayout -
是的,我用 cardLayout 重构了我的项目,现在一切正常,谢谢 :D