Java InvokeLater()-只要一次就足够了吗?
我使用推荐的代码启动使用Swing的交互式程序: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”,并在用
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
- 您可以在所有情况下使用
和pack()
包装成setVisible(true)
invokeLater
- 对于新的
-始终顶级容器
- 对于已创建但从未显示的容器-始终
- 对于容器,一次可见,然后隐藏,然后在屏幕上再次可见-始终
- 不管是否从Swing侦听器(默认情况下在EDT上)调用
- 说到我的第三点。在重用顶级容器的情况下,避免任何不必要的
缺失(具体说明,时间很短,但可能可见,但不讨厌)图形
- 旧值可见,然后立即刷新为当前值
- 旧的
可见,然后立即用当前的JComponents
JComponents
/relayout
,与上午的问题相同pack()
将此事件延迟(在大多数成功案例中)到invokeLater
EDT