我有同样的问题,并通过调用 setVisible(true); 我正在使用的 JFrame。
示例:如果您的 JFrame 在使用后没有更新:
jframe.setContentPane(new MyContentPane());
修复它:
jframe.setContentPane(new MyContentPane());
jframe.setVisible(true);
我知道即使您的 JFrame 已经可见,这样做听起来很愚蠢,但这是我迄今为止发现的解决此问题的唯一方法(上面提出的解决方案对我不起作用)。
这是一个完整的例子。运行它,然后取消注释“f.setVisible(true);” Panel1 和 Panel2 类中的说明,您会看到不同之处。不要忘记导入(Ctrl + Shift + O 用于自动导入)。
主要课程:
public class Main {
private static JFrame f;
public static void main(String[] args) {
f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new Panel1(f));
f.pack();
f.setVisible(true);
}
}
Panel1类:
public class Panel1 extends JPanel{
private JFrame f;
public Panel1(JFrame frame) {
f = frame;
this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
JButton b = new JButton("Panel 1");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
f.setContentPane(new Panel2(f));
// Uncomment the instruction below to fix GUI "update-on-resize-only" problem
//f.setVisible(true);
}
});
add(b);
}
}
Panel2类:
public class Panel2 extends JPanel{
private JFrame f;
public Panel2(JFrame frame) {
f = frame;
this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
JButton b = new JButton("Panel 2");
b.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
f.setContentPane(new Panel1(f));
// Uncomment the instruction below to fix GUI "update-on-resize-only" problem
//f.setVisible(true);
}
});
add(b);
}
}
希望有帮助。
问候。