Jes*_*ose 69 java user-interface scala
适当的,我的意思是:
没有特别的顺序.
哪些GUI工具包满足哪些条件?
rol*_*lve 36
Scala有自己的Swing库.这将使用引擎盖下的标准Swing库,但它有一些很好的补充,最值得注意的是,因为它是为Scala制作的,所以它可以比标准的Swing库更简洁的方式使用:
import swing._
object HelloWorld extends SimpleSwingApplication {
def top = new MainFrame {
title = "Hello, World!"
contents = new Button {
text = "Click Me!"
}
}
}
Run Code Online (Sandbox Code Playgroud)
看看设置小部件属性有多好和容易?
除了更好的语法和小的添加(如SimpleSwingApplication类),我认为优点和缺点与vanilla Swing几乎相同.
evi*_*bag 22
ScalaFX是JavaFX 2的成熟包装器.它在某些方面表面上与Scala Swing类似,但它具有一些使其脱颖而出的功能:
耦合到本机图形库 - 这意味着可以访问硬件加速和其他好东西,但需要在系统上安装JavaFX运行时.它包含在Java 8的大多数主要发行版中.这也意味着它在与其兼容的系统上呈现得非常好.
属性绑定 - 这是我的杀手级功能.说我有三个要素:A,B,和C.A并且B可以调整大小,并且C应该有一个高度是高度的总和A,并B在任何时候.在Swing中,这将涉及编写一组自定义事件侦听器来执行此工作.ScalaFX绑定允许您通过使用属性bind运算符来表达这一点:C.height <== A.height + B.height.除了其他功能之外,这还具有非常Scala-idiomatic的感觉.
JavaFX场景生成器(在编写时为测试版)是一个WYSIWYG GUI编辑器(尽管我还没试过).
文档是它的弱点.作为包装器,它通常会引用JavaFX文档.
Owe*_*wen 16
我使用Java Swing.以下是它与您的要求相符的方式:
成熟并广泛使用:是的,一吨.
丰富的小部件设置和渲染:这是有争议的.当您考虑使用其他库(例如SwingX)轻松补充Java Swing的能力时,它至少在这方面比Scala Swing更好,尽管可能不如其他一些Java工具包(尽管我不能对它们说话) .
惯用的斯卡拉:没有你想象的那么糟糕.一些辅助函数使它更好:
implicit class And[A](a: A) {
def and(f: A => Unit): A = {
f(a); a
}
}
Run Code Online (Sandbox Code Playgroud)
这样你就可以做到
val button = (new JButton("Press me!")
and (_ setForeground Color.red)
and (_ setFont new Font(null, Font.PLAIN, 12)))
val win = (new JFrame("Hello!")
and (_ add button)
and (_ pack())
and (_ setDefaultCloseOperation JFrame.EXIT_ON_CLOSE)
and (_ setVisible(true)))
Run Code Online (Sandbox Code Playgroud)
至于事件和状态,在我看来,这仍然是所有 gui框架中的粗略边缘- 听众有他们的问题,事件流有他们的问题.我在使用反应核心和重做信号(我自己的,未记录的)增强Swing事件方面取得了一般成功,以便更容易组织状态.
您可以使用更多辅助函数来改进定义侦听器的详细程度
def actionListener(f: => Unit) = new ActionListener {
def actionPerformed(e: ActionEvent) { f }
}
Run Code Online (Sandbox Code Playgroud)
和
def later(thing: => Unit) {
SwingUtilities.invokeLater(new Runnable {
def run() {
thing
}
})
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我希望Scala Swing采取这种方式.为现有Java类编写包装器是O(n)程序员时间,并没有为作者没有选择编写包装器的类提供任何帮助.创建通用的语法糖会让你更快.
有一个WYSIWYG-ish但灵活的GUI构建器:我使用IntelliJ IDEA表单,创建一个抽象类,然后使用Scala类将其子类化.组织成本只是一个额外的文件,我没有编写任何Java代码.
独立API文档:是的.
现在已经过了一段时间,值得注意的是ScalaJS也是一个可以考虑的选择.
违背您的要求:
缺点是它会将您的GUI从JVM移到浏览器中,因此您无法使用所有这些Java库.
Luk*_*asz -25
我想说使用.Net,它成熟且使用广泛。
但 ...
我假设您需要使用 Scala。为此,我会坚持使用 Java,因为它具有更好的工具支持,例如 IDEA 或 NetBeans。当然,您可以混合使用 Java 和 Scala。所以你的 GUI 可以用调用 Scala 后端的 Java 来完成。另请查看 JGoodies,他们有很多可以在 Swing 中构建 UI 的好东西。目前,Scala GUI 应用程序还没有工具支持(对于非 GUI,它仍然落后于 Java)。
| 归档时间: |
|
| 查看次数: |
32856 次 |
| 最近记录: |