Scala swing的经验,它如何添加到Java swing中已经可用的功能?有什么挑战吗?

声波蛋白

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

我只是对其他人对Scala swing的使用感到好奇,它在哪些方面比Java更好?

例如,我听到的关于Scala swing优点的主要参数是:1)它包装了Java swing,因此可以使用Java swing中的许多功能2)简化了事件处理。讨厌的匿名类,并记住像Java中那样重写的方法3)您可以使用功能强大的Scala集合库4)功能更强大的图形绘制(编辑:并非如此,对不起,我是初学者:P)

我说没有什么比经验更重要的,所以对于那些使用Scala swing已有一段时间的人来说,您的经验是什么?我没有列出任何好处吗?是否存在任何挑战(或某些挑战,以及Java摇摆不成功?)?

0__

昨天,我碰巧看到了我的一个较旧的项目,其中包含许多从该项目的先前Java版本迁移而来的东西。当时我还不完全相信Scala Swing,因此它仍然使用javax.swing(在Scala中)。看到该代码后,我不敢在这里使用Scala Swing是一个巨大的错误。

Scala Swing具有使代码更加冗长且易于阅读和编写的巨大优势您清单上的项目1、2和3绝对适用。不过,我不了解第4号“更强大的图形绘图”。Scala Swing的包装器组件具有一个钩子,可让您覆盖它们自己的paintComponent方法,并且可以正确注入绘图代码。但是除了获得通常在Java中必须强制转换的java.awt.Graphics2D替代之外java.awt.Graphics,我在这里看不到任何优势。

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

Scala Swing通常假设您的GUI很简单。例如,对于底层的小部件模型,通常没有适当的包装器。例如,ListView您使用静态项目列表创建它。没有驱动列表的动态列表模型的概念。如果需要,您必须再次与同伴打交道。

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Scala将关闭挂钩添加到Scala swing

来自分类Dev

将标签添加到Scala Swing面板时出现类型不匹配错误

来自分类Dev

Java / Scala Swing:使组件连续填充所有可用空间

来自分类Dev

Scala将元素添加到Scala的Nil列表中

来自分类Dev

如何使用SBT配置将附加文件添加到不是Java或Scala文件的类路径中?

来自分类Dev

Java Swing:如何将多个JPanel添加到JScrollPane

来自分类Dev

如何将MouseListener添加到Java Swing画布上的项目

来自分类Dev

如何将MouseListener添加到Java Swing画布上的项目

来自分类Dev

Java Swing:如何将多个JPanel添加到JScrollPane

来自分类Dev

为什么激活器/ sbt将Scala版本添加到纯Java库依赖项?

来自分类Dev

Java Swing:组件未通过JScrollPane添加到JPanel

来自分类Dev

Java Swing无法将多个面板添加到面板

来自分类Dev

Java Swing无法将多个面板添加到面板

来自分类Dev

Java Swing:组件未通过JScrollPane添加到JPanel

来自分类Dev

如何将scalatest依赖项添加到现有的scala / lift项目中?

来自分类Dev

如何将一个集合添加到 Scala 中的集合列表中

来自分类Dev

将标头记录(或字符串/文件)添加到 Scala/Java 中的大文件

来自分类Dev

如何在scala中将字母添加到数组中的每个元素

来自分类Dev

Scala Swing中的案例类

来自分类Dev

将配置添加到Scala中的Singleton对象

来自分类Dev

在Zsh中将Scala添加到`PATH`中

来自分类Dev

将键值对添加到Scala中的Map

来自分类Dev

在Scala中将元素添加到树中

来自分类Dev

与Swing相关的Scala NoClassDefFoundError

来自分类Dev

我已经在Scala列表中添加了一个函数,现在如何删除它?

来自分类Dev

我已经在Scala列表中添加了一个函数,现在如何删除它?

来自分类Dev

如何设置Scala Swing表的列宽

来自分类Dev

如何在Scala Swing中使用Actionlistener

来自分类Dev

Scala Swing:如何使用鼠标平移图像?

Related 相关文章

  1. 1

    Scala将关闭挂钩添加到Scala swing

  2. 2

    将标签添加到Scala Swing面板时出现类型不匹配错误

  3. 3

    Java / Scala Swing:使组件连续填充所有可用空间

  4. 4

    Scala将元素添加到Scala的Nil列表中

  5. 5

    如何使用SBT配置将附加文件添加到不是Java或Scala文件的类路径中?

  6. 6

    Java Swing:如何将多个JPanel添加到JScrollPane

  7. 7

    如何将MouseListener添加到Java Swing画布上的项目

  8. 8

    如何将MouseListener添加到Java Swing画布上的项目

  9. 9

    Java Swing:如何将多个JPanel添加到JScrollPane

  10. 10

    为什么激活器/ sbt将Scala版本添加到纯Java库依赖项?

  11. 11

    Java Swing:组件未通过JScrollPane添加到JPanel

  12. 12

    Java Swing无法将多个面板添加到面板

  13. 13

    Java Swing无法将多个面板添加到面板

  14. 14

    Java Swing:组件未通过JScrollPane添加到JPanel

  15. 15

    如何将scalatest依赖项添加到现有的scala / lift项目中?

  16. 16

    如何将一个集合添加到 Scala 中的集合列表中

  17. 17

    将标头记录(或字符串/文件)添加到 Scala/Java 中的大文件

  18. 18

    如何在scala中将字母添加到数组中的每个元素

  19. 19

    Scala Swing中的案例类

  20. 20

    将配置添加到Scala中的Singleton对象

  21. 21

    在Zsh中将Scala添加到`PATH`中

  22. 22

    将键值对添加到Scala中的Map

  23. 23

    在Scala中将元素添加到树中

  24. 24

    与Swing相关的Scala NoClassDefFoundError

  25. 25

    我已经在Scala列表中添加了一个函数,现在如何删除它?

  26. 26

    我已经在Scala列表中添加了一个函数,现在如何删除它?

  27. 27

    如何设置Scala Swing表的列宽

  28. 28

    如何在Scala Swing中使用Actionlistener

  29. 29

    Scala Swing:如何使用鼠标平移图像?

热门标签

归档