3

我的摇摆应用程序有一个带有服务器按钮的主窗口。这个 JFrame 在 EDT 中启动...

    EventQueue.invokeLater(new Runnable() {
        public void run() {
            JFrame server = new JFrame();
            server.setVisible(true);
            server.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

                            //Do other stuff here
        }
    });

每个按钮都可以启动一个单独的 JFrame。

我不确定是否必须启动一个新的 EDT 线程来启动每个新窗口?谢谢。

4

3 回答 3

4

通常,当您在按钮处理程序(即动作侦听器)中时,调用它的是 EDT。您可以使用 SwingUtilities.isEventDispatchThread 进行检查

于 2012-04-11T19:56:41.180 回答
3

没有问题 - 每个动作处理程序都在EDT. 所以如果你JFrame从这样的地方打开新的就没有问题了。

如果你在不同的线程中做一些工作(例如计算),那很好,但所有涉及 UI 的工作都必须在EDT. 这就是为什么我们有SwingWorkerinvokeLater

于 2012-04-11T19:56:48.110 回答
2

我的答案是

  • 不是,你可以先准备好JFrame它的内容,但是EDT有两个最重要的方法,

    1. JFrame#pack() // finalize & calculate used LayoutManager

    2. JFrame#setVisible(true) // display Container on the screen

  • Each button can launch a separate JFrame.不要那样做,使用CardLayout代替,在视图之间切换,如果你需要弹出窗口,那么只创建一个 JFrame 而另一个容器可能只是JDialog

于 2012-04-11T20:00:02.787 回答