【发布时间】:2015-04-25 23:19:46
【问题描述】:
这个问题我想了很久。
我通常通过将JFrame 和包含窗口内容的JPanel 设置为setContentPane() 的内容窗格来构建我的SWING 程序。当我希望将我的内容替换为另一个内容时(例如,单击按钮后获取新蒙版),我再次调用 setContentPane() 并将内容窗格替换为另一个面板。但是每次我这样做时,我都需要在setContentPane() 之后调用repaint() 以使更改可见,因此我创建了一个自己的类用于创建框架。此类扩展 JFrame 并覆盖 setContentPane(),如下所示:
@Override
public void setContentPane(Container c) {
super.setContentPane(c);
revalidate();
repaint();
}
为什么这在默认的JFrame 类中没有实现?这样做会不会有不好的副作用?
【问题讨论】:
-
你用什么布局管理器?
-
为什么要这样?一般来说,您应该按原样设置并保留内容窗格。您可能还会对 UI 进行更多更改,而您不想在完成之前安排重绘......
-
您还要求回溯大约 15 年以上设计和编写 API 的开发人员的头脑。需求与我们今天的需求明显不同,以 JavaFX 的概念差异为例
-
@MadProgrammer:为什么要在 setContentPane() 之后进行更改?我完全准备好新面具,所以我的“主面板”中有全新的面具。在此之后我调用 setContentPane()。这是我要做的最后一步。
-
@Foxx 因为我不认为这是设计者对
setContentPane的想法,他们的想法是“设置”一次,然后修改contentPane本身的内容。同样,您是在询问设计师最初的想法。
标签: java swing jframe contentpane