Scala swing的经验,它如何增加什么';Java swing中已经有了吗?有什么挑战吗?

Scala swing的经验,它如何增加什么';Java swing中已经有了吗?有什么挑战吗?,java,swing,scala,user-interface,Java,Swing,Scala,User Interface,我刚刚开始学习Scala语言,目的是使用Scala swing开发GUI应用程序 我只是好奇其他人对Scala swing的一些体验,以及它在哪些方面优于Java 例如,我听到的有关Scala swing优势的主要论点有: 1) 由于它包装了JavaSwing,所以可以使用JavaSwing中的许多可用特性 2) 它简化了事件处理。。不再使用那些讨厌的匿名类,也不再像在Java中那样记住要重写哪些方法 3) 您可以使用功能强大的Scala集合库 4) 更强大的图形绘制(编辑:不是真的,对不起,我

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

我只是好奇其他人对Scala swing的一些体验,以及它在哪些方面优于Java

例如,我听到的有关Scala swing优势的主要论点有: 1) 由于它包装了JavaSwing,所以可以使用JavaSwing中的许多可用特性 2) 它简化了事件处理。。不再使用那些讨厌的匿名类,也不再像在Java中那样记住要重写哪些方法 3) 您可以使用功能强大的Scala集合库 4) 更强大的图形绘制(编辑:不是真的,对不起,我是初学者:P)


我说没有什么比经验更好,所以对于那些使用Scala swing一段时间的人。。你的经历是什么?有什么我没有列出的好处吗?有什么挑战吗(或者有些事情没有Java swing做得好?

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

Scala Swing的巨大优势是使代码更不冗长,更易于阅读和编写。清单上的项目1、2和3绝对适用。不过,我不懂第四条“更强大的图形绘制”。Scala Swing的包装器组件有一个钩子,允许您重写它们自己的
paintComponent
方法,绘图代码将被正确注入。但是除了得到一个
java.awt.Graphics2D
而不是
java.awt.Graphics
(通常必须在java中转换),我认为这里没有什么优势

Scala Swing的设计大部分都做得很好,但有一些事情我不喜欢。首先,这里缺少一些东西,这意味着对于任何非平凡的GUI,您都必须不时地调用
peer
javax.swing层。没什么大不了的,但在美学上并不令人满意。有几个项目需要修改,例如和

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

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


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

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

Scala Swing的巨大优势是使代码更不冗长,更易于阅读和编写。清单上的第1、2和3项绝对适用。不过,我不懂第四条“更强大的图形绘制”。Scala Swing的包装器组件有一个钩子,允许您重写它们自己的
paintComponent
方法,绘图代码将被正确注入。但是除了得到一个
java.awt.Graphics2D
而不是
java.awt.Graphics
(通常必须在java中转换),我认为这里没有什么优势

Scala Swing的设计大部分都做得很好,但有一些事情我不喜欢。首先,这里缺少一些东西,这意味着对于任何非平凡的GUI,您都必须不时地调用
peer
javax.swing层。没什么大不了的,但在美学上并不令人满意。有几个项目需要修改,例如和

scalaswing通常假设GUI很简单。例如,底层小部件模型通常没有合适的包装器。例如,
ListView
——您使用静态项目列表创建它。没有驱动视图的动态列表模型的概念。如果你想这样,你必须再次与同伴打交道

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

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