我刚刚开始学习Scala语言,目的是使用Scala swing开发GUI应用程序。
我只是对其他人对Scala swing的使用感到好奇,它在哪些方面比Java更好?
例如,我听到的关于Scala swing优点的主要参数是:1)它包装了Java swing,因此可以使用Java swing中的许多功能2)简化了事件处理。讨厌的匿名类,并记住像Java中那样重写的方法3)您可以使用功能强大的Scala集合库4)功能更强大的图形绘制(编辑:并非如此,对不起,我是初学者:P)
我说没有什么比经验更重要的,所以对于那些使用Scala swing已有一段时间的人来说,您的经验是什么?我没有列出任何好处吗?是否存在任何挑战(或某些挑战,以及Java摇摆不成功?)?
昨天,我碰巧看到了我的一个较旧的项目,其中包含许多从该项目的先前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层。没什么大不了,但是在美学上不令人满意。有一些项目可以对此进行修改,例如ScalaSwingContrib和SwingPlus。
Scala Swing通常假设您的GUI很简单。例如,对于底层的小部件模型,通常没有适当的包装器。例如,ListView
您使用静态项目列表创建它。没有驱动列表的动态列表模型的概念。如果需要,您必须再次与同伴打交道。
我不喜欢的第二件事是反应堆方法的类型设计非常动态,而且类型安全性也不高。我本来希望使用一种不同的方法,该方法对小部件发布的事件使用密封的特征,因此PartialFunctions
可以对您的反应进行类型检查。一个相关的问题是,例如ListView[A]
,使用类型参数化的小部件进行类型化,就无法将事件参数化为A
(假设:)ListView.ItemSelected[A](v: ListView[A], elem: A)
。对于Table
,甚至没有努力使用类型参数。
尽管如此,我还是建议使用Scala编写桌面应用程序的任何人都去使用Scala Swing,而不要使用javax.swing。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句