为什么Frames和JFrames默认设置为不可见?

时间:2010-12-09 21:46:32

标签: java swing

有没有人知道Java Frames和JFrames的合理性默认设置为不可见?

即。你必须调用myFrameObject.setVisible(true)或最终得到一个不可见的应用程序接口。

由于你没有在C#或Objective-C等其他语言中看到这一点,这一直困扰着我。我想知道它是否打算节省时间,或者Java架构师是否只是度过了糟糕的一天。

了解这一点将有助于我理解生命,宇宙和一切的最终答案。

2 个答案:

答案 0 :(得分:6)

我一直认为它是这样你可以在显示它之前填充窗口。否则你可以看到一堆控件在添加时随机播放。今天的机器+ JIT可能不是一个值得注意的问题,但是在Java的早期阶段,JVM中的机器和字节码解释器速度较慢,它可能会产生重大影响。

它还模仿顶级窗口在X11中的工作方式:您创建窗口,然后稍后“映射”它(使其可见)。

答案 1 :(得分:1)

请记住,从操作系统的角度来看,Swing组件不是真正的组件。每个Swing组件都需要“实现”。这是通过调用pack()或setVisible()方法完成的。只有在此时,Swing组件才会映射到操作系统的对等组件。

请记住,当您向可见的GUI添加组件时,组件将不会出现,因为您需要调用布局管理器来布局所有组件。因此,即使框架是自动可见的,在这种情况下,您仍然需要调用frame.validate()以确保组件正确布局。

我认为添加所有组件然后在将所有内容添加到框架后使其可见是更好的设计。这样,您只需布置一次组件,而不是在添加每个组件之后。也许使用其他使用绝对大小和定位的语言这不是什么大问题,因为它们没有布局管理器的概念。