加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

使用Java Swing时实现Runnable

发布时间:2020-12-14 19:25:14 所属栏目:Java 来源:网络整理
导读:现在学习了一些Swing,发现了两个教程,它们使用了不同的方法来制作简单的JFrame窗口. 第一个实现Runnable并在类中具有JFrame对象变量: class SwingDemo implements Runnable { private JFrame frame; @Override public void run() { frame = new JFrame("tit

现在学习了一些Swing,发现了两个教程,它们使用了不同的方法来制作简单的JFrame窗口.

第一个实现Runnable并在类中具有JFrame对象变量:

class SwingDemo implements Runnable {
    private JFrame frame;

    @Override
    public void run() {
        frame = new JFrame("title");

        ... // setSize(),add components,etc

    }
}

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new SwingDemo());
    }
}

第二个教程没有实现Runnable,而是使用类构造函数初始化JFrame并通过匿名内部类调用该构造函数

class SwingDemoAlt {

    public SwingDemoAlt() {
        JFrame frame = new JFrame("title");

        ... // again some code here

    }
}

public class Main {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new SwingDemoAlt();
            }
        }
    }
}

两种方式有何不同?一种方法更可取吗?

最佳答案

How do the two ways differ?

他们并不是,不是真的,他们基本上是通过不同的方式实现同??一件事.

第一种是更“传统”的方法,第二种是更“现代”的或简化的方法,该方法利用了Anonymous Classes语言的受欢迎程度.

And is there a more preferred choice?

这是一个观点,对我来说,第二个是首选,因为它不会在类上添加Runnable的其他不必要的一致性,它还委派了在调用方上正确设置UI的责任,并停止了代码通过做出假设(即,您可以在运行的任何时候简单地构造框架…只需在事件调度线程的上下文中进行操作即可).

另外,作为首选项,您不应直接从JFrame扩展,因为您实际上并未在类中添加新功能,而是像第二个示例中所做的那样,仅在需要时创建实例并构建UI在它的上面

您可能还希望查看Concurrency in Swing,以获取有关为什么应使用EventQueue.invokeLater启动UI的更多详细信息.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读