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

Java JFrame setVisible(false)和setState(Frame.ICONIFIED)之间的差异,java,swing,jframe,Java,Swing,Jframe,在Swing中,我们可以使用两种方法隐藏JFrame: frame.setVisible(false) frame.setState(frame.ICONIFIED) 我发现的区别是: frame.setVisible(false)从任务栏中删除图标,而图标化的不会 我们可以将侦听器添加到ICONIFIED,而不能为frame.setVisible(false)添加侦听器 我还缺少其他重要的区别吗?任何想法都将不胜感激。使用setVisible(false),如果组件尚未标记为不可见,则setV

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

  • frame.setVisible(false)
  • frame.setState(frame.ICONIFIED)
  • 我发现的区别是:

  • frame.setVisible(false)
    从任务栏中删除图标,而
    图标化的
    不会
  • 我们可以将侦听器添加到
    ICONIFIED
    ,而不能为
    frame.setVisible(false)
    添加侦听器
  • 我还缺少其他重要的区别吗?任何想法都将不胜感激。

    使用setVisible(false),如果组件尚未标记为不可见,则setVisible调用invalidate()这会使容器的布局和父链无效,因为现在容器中有更多的屏幕不动产,必须调整同级的位置以流入释放的空间。

    但是
    ICONFIED
    正在执行窗口的最小化过程

    我们可以将侦听器添加到ICONIFIED,但不能为frame.setVisible(false)添加侦听器


    您可以使用
    ComponentListener
    和处理
    componentHidden(…)
    我所知道的主要区别如下:
    1) frame.setState(frame.ICONIFIED)只更改帧的状态,而frame.setVisible(false)更改帧的可见性。
    2) 类java.awt.Frame中的setState(Frame.ICONIFIED)方法可以通过编程最小化一个帧,并设置state(Frame.NORMAL)来恢复它。
    3) 不可见帧不能使用任何侦听器,但您可以将侦听器添加到图标化的帧。
    4) frame.setVisible(false)从屏幕上删除frame的物理状态,而setState(frame.ICONIFIED)只是更改状态以保留其物理状态


    这两种方法各有其特点,因此请更自信地选择一种更适合您的情况。

    帧的默认关闭操作是什么?这将改变
    setVisible(false)
    JFrame.EXIT\u ON\u CLOSE关闭该帧,如果它是程序的唯一活动帧,则程序也将关闭。我知道这么多。我被你的评论“这将改变setVisible(false)的行为”弄糊涂了。请尝试使用其他(
    DISPOSE\u ON\u CLOSE
    &
    DO\u NOTHING\u ON\u CLOSE
    ),在使用时查阅Java文档。有关关闭时的处置,请参阅。图标应该出现在任务栏中,直到最后一个关闭。ComponentListener对我来说真的很新。你能不能再给我一些不同点,并把它们列出来。