Java InvokeLater()-只要一次就足够了吗?

Java InvokeLater()-只要一次就足够了吗?,java,swing,jframe,event-dispatch-thread,invokelater,Java,Swing,Jframe,Event Dispatch Thread,Invokelater,我使用推荐的代码启动使用Swing的交互式程序: public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater( new Runnable() { public void run() { createAndShowGUI(); } } ) }; 它创建一个JFrame,称之为“Foo”,并在用

我使用推荐的代码启动使用Swing的交互式程序:

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(
        new Runnable() {
          public void run() {
            createAndShowGUI();
          } } ) };

它创建一个JFrame,称之为“Foo”,并在用户关闭该窗口时结束(通过使用操作系统的Close-windowx图标或其他操作系统方式关闭应用程序)

我想显示另一个窗口“Bar”,获取用户输入,用我自己的Swing调用关闭该窗口,然后显示“Foo”窗口。

我可以为Foo和Bar重用相同的JFrame,并在两者之间清除它。但我更喜欢让它们在设计上更加独立。因此,Foo中的ActionListener需要关闭Foo的框架,并调用显示栏的代码。


我是否需要使用InvokeLater()调用显示条的代码?为了获得更多的设计独立性,我的main()应该启动并同步两个线程吗

用户触发的操作侦听器代码在EDT中执行,因此无需再次包装。也就是说,很可能使用
CardLayout
比使用多个帧更合适。

用户触发的操作侦听器代码在EDT中执行,因此无需再次包装。也就是说,很可能使用
CardLayout
比使用多个帧更合适

我可以对Foo和Bar重复使用相同的JFrame,然后将其清除 介于两者之间。但我更愿意让他们在工作中更加独立 他们的设计。因此,Foo中的ActionListener需要关闭Foo的 框架,并调用显示该条的代码

我是否需要使用InvokeLater()调用显示条的代码?到 获得更多的设计独立性,我不清楚 美国东部时间

  • 您可以在所有情况下使用
    pack()
    setVisible(true)
    包装成
    invokeLater

  • 对于新的
    顶级容器
    -始终

  • 对于已创建但从未显示的容器-始终

  • 对于容器,一次可见,然后隐藏,然后在屏幕上再次可见-始终

  • 不管是否从Swing侦听器(默认情况下在EDT上)调用

  • 说到我的第三点。在重用顶级容器的情况下,避免任何不必要的
    图形
    缺失(具体说明,时间很短,但可能可见,但不讨厌)

    • 旧值可见,然后立即刷新为当前值

    • 旧的
      JComponents
      可见,然后立即用当前的
      JComponents

    • relayout
      /
      pack()
      ,与上午的问题相同

  • invokeLater
    将此事件延迟(在大多数成功案例中)到
    EDT

我可以对Foo和Bar重复使用相同的JFrame,然后将其清除 介于两者之间。但我更愿意让他们在工作中更加独立 他们的设计。因此,Foo中的ActionListener需要关闭Foo的 框架,并调用显示该条的代码

我是否需要使用InvokeLater()调用显示条的代码?到 获得更多的设计独立性,我不清楚 美国东部时间

  • 您可以在所有情况下使用
    pack()
    setVisible(true)
    包装成
    invokeLater

  • 对于新的
    顶级容器
    -始终

  • 对于已创建但从未显示的容器-始终

  • 对于容器,一次可见,然后隐藏,然后在屏幕上再次可见-始终

  • 不管是否从Swing侦听器(默认情况下在EDT上)调用

  • 说到我的第三点。在重用顶级容器的情况下,避免任何不必要的
    图形
    缺失(具体说明,时间很短,但可能可见,但不讨厌)

    • 旧值可见,然后立即刷新为当前值

    • 旧的
      JComponents
      可见,然后立即用当前的
      JComponents

    • relayout
      /
      pack()
      ,与上午的问题相同

  • invokeLater
    将此事件延迟(在大多数成功案例中)到
    EDT


TYVM。CardLayout在哪些方面更好?(我从来没有使用过它,也没有读过它。)一般来说,用户不需要多个窗口,只需要一个frame@ElHombre55它提供了一种切换窗口(或任何其他组件)内容的简单方法。本质上是一种更干净的方法来重用相同的框架。内容的布局仍然可以独立设计。CardLayout提供了一个很好的方法来选择显示的组件树。@nachokk同意。我的UI是只显示菜单;相互作用;只有被摄体显示在同一位置;.TYVM。CardLayout在哪些方面更好?(我从来没有使用过它,也没有读过它。)一般来说,用户不需要多个窗口,只需要一个frame@ElHombre55它提供了一种切换窗口(或任何其他组件)内容的简单方法。本质上是一种更干净的方法来重用相同的框架。内容的布局仍然可以独立设计。CardLayout提供了一个很好的方法来选择显示的组件树。@nachokk同意。我的UI是只显示菜单;相互作用;只有被摄体显示在同一位置;互动。