java - 使用 Scala swing 的经验,它如何添加到 Java swing 中已经可用的内容?有什么挑战吗?

标签 java swing scala user-interface

我刚刚开始学习 Scala 语言,目的是使用 Scala swing 开发 GUI 应用程序。

我只是想知道其他人对 Scala swing 的一些体验,以及它在哪些方面比 Java 更好?

例如,我听到的关于 Scala swing 优点的主要论点是: 1) 它包装了 java swing,因此可以使用 Java swing 中可用的许多功能 2) 它简化了事件处理.. 不再有那些讨厌的匿名类和记住在 Java 中重写哪些方法 3)可以利用强大的Scala集合库 4)更强大的图形绘制(编辑:不是真的,抱歉我是初学者:P)

不过,我要说没有什么比体验更重要的了,所以对于那些已经使用 Scala swing 一段时间的人来说……您的体验是什么?有什么我没有在上面列出的好处吗?是否存在任何挑战(或者它做的不如 Java swing 的某些事情?)?

最佳答案

我昨天碰巧看了我的一个旧项目,其中包含很多从该项目的先前 Java 版本迁移过来的东西。当时我还没有完全相信 Scala Swing,所以它仍然使用 javax.swing(在 Scala 中)。看到那段代码,我突然想到,在这里不使用 Scala Swing 是一个多么大的错误。

Scala Swing 具有使代码大大不那么冗长且更易于阅读和编写的巨大优势。您列表中的第 1、2 和 3 项绝对适用。不过,我不明白第 4 个“更强大的图形绘制”。 Scala Swing 的包装器组件有一个钩子(Hook),允许您覆盖它们自己的 paintComponent 方法,并且绘制代码将被正确注入(inject)。但是除了获取 java.awt.Graphics2D 而不是通常必须用 Java 转换的 java.awt.Graphics 之外,我看不出这里有什么优势。

Scala Swing 的设计大部分都做得很好,但也有一些我不喜欢的地方。首先,缺少一些东西,这意味着对于任何重要的 GUI,您将不得不时不时地调用 peer javax.swing 层。没什么大不了的,但在美学上不令人满意。有一些项目可以对此进行修改,例如ScalaSwingContribSwingPlus .

Scala Swing 通常假设您的 GUI 很简单。例如,底层小部件模型通常没有合适的包装器。以 ListView 为例——您使用静态项目列表创建它。没有驱动 View 的动态列表模型的概念。如果你想要那个,你必须再次与同行打交道。

我不喜欢的第二件事是, react 堆方法的类型设计非常动态,而且类型不安全。我更喜欢一种不同的方法,它对小部件发布的事件使用密封特征,因此可以对您的 react PartialFunctions 进行类型检查。一个相关的问题是类型参数化的小部件,例如ListView[A],无法在 A 中设置事件参数(假设:ListView.ItemSelected[A](v: ListView[A], elem : A)).对于 Table,甚至没有努力使用类型参数。

尽管如此,我还是建议所有使用 Scala 编写桌面应用程序的人去使用 Scala Swing 而不是 javax.swing。

关于java - 使用 Scala swing 的经验,它如何添加到 Java swing 中已经可用的内容?有什么挑战吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21658491/

相关文章:

java - 更改 jTable 中行的颜色

scala - 使用 Java 类的 Spark Scala 数据集

java - 以本地用户启动Tomcat导致JVM_Bind异常

java - Netscaler : sudden ACK, RST数据包

java - 在 Jfreechart 中自定义鼠标光标

java - 0% 代码覆盖 jacoco4sbt 2.0.0, sbt 0.12.2

scala - 连接后如何避免重复列?

java - 需要一些关于如何在 Java 中实现这一点的想法(解析字符串)

java - 将与文字连接的引用与其他引用进行比较时,得到 == 运算符比较 false

java - 有没有一种简单的方法可以在获得焦点时更改 Java/Swing 控件的行为?