JFrame setVisible(false)和setState(Frame.ICONIFIED)之间的差异

时间:2014-09-17 10:16:00

标签: java swing jframe

在Swing中,我们可以使用两种方法隐藏JFrame

  1. frame.setVisible(false)
  2. frame.setState(Frame.ICONIFIED)
  3. 我发现的不同之处是:

    1. frame.setVisible(false)从任务栏中删除图标,而ICONIFIED则不会。
    2. 我们可以将监听器添加到ICONIFIED,而我们无法将其添加到frame.setVisible(false)
    3. 我还缺少其他重大差异吗?任何想法都将不胜感激。

3 个答案:

答案 0 :(得分:2)

With setVisible(false), if the Component is not already marked invisible, setVisible calls invalidate() which invalidates the Container’s layout and the chain of parents since there is now more screen real estate in the Container and the positions of the siblings must be adjusted to flow into the freed space.

API of Component

但是ICONFIED正在进行窗口的最小化处理。

答案 1 :(得分:1)

  

我们可以将侦听器添加到ICONIFIED,而我们无法为frame.setVisible(false)添加它。

您可以使用ComponentListener并处理componentHidden(...)

答案 2 :(得分:1)

据我所知,主要的不同之处如下:
1)frame.setState(Frame.ICONIFIED)只改变帧的状态,而frame.setVisible(false)改变帧的可见性。
2)类java.awt.Frame中的setState(Frame.ICONIFIED)方法可以以编程方式最小化帧,并使用setState(Frame.NORMAL)来恢复它。
3)不可见的框架不能使用任何监听器,但您可以将监听器添加到ICONIFIED的框架 4)frame.setVisible(false)从屏幕上删除帧的物理状态,而setState(Frame.ICONIFIED)只是改变保持其物理状态的状态。

这两种方法各有特色,因此在选择更适合您情况的方法时更有信心。