是否有用于在Scala中创建GUI的GUI?

时间:2010-12-20 09:32:29

标签: user-interface scala

是否有类似于Scala的WindowBuilder?

2 个答案:

答案 0 :(得分:11)

我不知道Scala的任何WYSIWYG GUI构建器。但你不需要一个。事实上,严格来说,Scala并没有拥有 GUI;它只是使用底层平台的GUI(或GUI)。

因此,Scala的JVM端口使用AWT,Swing或SWT,Scala的CLI端口使用WinForms或WPF。我听说过有关Scala端口到ECMAScript运行时和Objective-C运行时的传闻,这些可能会分别使用HTML5和Quartz / Cocoa。

这意味着您可以使用现有工具,例如Expression Blend for WPF或Matisse for Swing。

但请注意,至少对于Swing,有一个辉煌的scala.swing库,其中包含用于以编程方式构建GUI的嵌入式DSL。这不是WYSIWYG,所以它不是你要求的,但我更喜欢它,因为它是WYMIWYG(你的意思是你得到的),这与我拥有的所有GUI工具到目前为止,似乎几乎不可能实现。

答案 1 :(得分:2)

使用JBuilder构建GUI(并假设WindowBuilder的工作原理相同),概念上可以在Java中开发您的裸骨GUI骨架(作为抽象类)。然后,您可以在Scala中扩展或使用它们。它应该容易拉掉它(注意我说它应该是因为我没有做过,而且我纯粹假设来自相关但不直接的经验。)

例如,当我开发GUI时,我会创建抽象的“视图”,使用适当的布局抽象骨架,可视化组件等,并使用预定义的回调进行初始化,破坏,使可见/不可见,线程等。

然后,我将抽象的“视图”子类化为一个“具体的视图”类,它完成了繁重的工作 - 注册听众,GUI逻辑等。这样做的事情需要更多的肘部油脂(有时甚至更多)而不仅仅是混合GUI布局的东西和逻辑的东西。但我倾向于遵循的方法将GUI逻辑和行为逻辑分开。它保持清洁。

回到你的问题:应该可以在Scala中定义你的“具体视图”类。完全支持作为第一个值对象,闭包,lambdas和所有FP好东西的函数,使用Scala实现监听器和线程动作处理程序要容易得多。

你应该尝试一下,让我们知道它是怎么回事(以及它是否可行或足够容易让它值得追求。)