首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >适合Scala的GUI框架?

适合Scala的GUI框架?
EN

Stack Overflow用户
提问于 2012-05-08 18:47:07
回答 5查看 38.5K关注 0票数 72

我所说的适当,是指:

  • 成熟且使用过的extensively
  • rich小部件集可以很好地呈现
  • 惯用的Scala
  • 获得了一个所见即所得但灵活的图形用户界面builder
  • standalone

文档(如果是包装器,它不应该让我用其他语言引用父项目)

没有特定的顺序。

哪些GUI工具包满足哪些条件?

EN

回答 5

Stack Overflow用户

发布于 2012-05-08 21:13:40

Scala有自己的Swing库。这将在幕后使用标准的Swing库,但它有一些很好的补充,最值得注意的是,因为它是为Scala而设计的,所以它可以以比标准Swing库更简洁的方式使用:

import swing._

object HelloWorld extends SimpleSwingApplication {
  def top = new MainFrame {
    title = "Hello, World!"
    contents = new Button {
      text = "Click Me!"
    }
  }
}

看到设置小部件属性有多简单了吗?

除了更好的语法和一些小的附加(比如SimpleSwingApplication类),我认为它的优点和缺点和普通的Swing差不多。

这是一个Overview of Scala Swing

票数 38
EN

Stack Overflow用户

发布于 2014-06-14 06:02:38

ScalaFX是Scala2的一个成熟的包装器,它在某些方面表面上类似于JavaFX Swing,但有一些特性让它脱颖而出:

  • 耦合到本地图形库-这意味着可以访问硬件加速和其他好处,但需要在系统上安装JavaFX运行时。它包含在Java8的大多数主要发行版中,这也意味着它在使用compatible.
  • Property绑定的系统上呈现得非常好--这是我的杀手级特性。假设我有三个元素:ABCAB是可调整大小的,C的高度应该是所有时间AB的高度之和。在Swing中,这需要编写一组自定义事件侦听器来执行此工作。ScalaFX绑定让您可以通过使用属性绑定操作符C.height <== A.height + B.height来简单地表达这一点。
  • JavaFX Scene Builder是一个所见即所得的图形用户界面编辑器(我还没有试过,Scala是它的弱点)。作为一个包装器,它通常引用回JavaFX documentation.
票数 24
EN

Stack Overflow用户

发布于 2013-10-23 07:38:29

我使用Java Swing。下面是它如何与您的需求相匹配:

  • 的成熟和广泛使用:是的,大量。
  • 丰富的小部件集和良好的呈现效果:这是有争议的。当您考虑使用附加库(例如SwingX)轻松地补充Java的能力时,它至少在这方面比Scala Swing做得更好,尽管可能不如其他一些Java工具包(尽管我不能与Scala Scala交谈:没有您想象的那么糟糕。一些帮助器函数可以让它更好:

隐式类和A{定义和(f:a =>单位):a={ f(a);a}}

这样你就可以做到

val JButton=(新按钮(“按下我!”)and (_ setForeground Color.red)和(_ setFont new Font(null,Font.PLAIN,12) val win = (new JFrame("Hello!") )和(_ add按钮)和(_ pack())和(_ setDefaultCloseOperation JFrame.EXIT_ON_CLOSE)和(_ setVisible(True)

现在对于事件和状态,在我看来,这仍然是所有gui框架中的一个粗略的优势-侦听器有他们的问题,事件流有他们的问题。我已经成功地用reactive-coreredo-signals (我自己的,未记录的)增强了Swing的事件,以便更容易地组织状态。

您可以使用一些更多的帮助函数来改进定义侦听器的繁琐程度,比如

def actionListener(f:=>单位)=新ActionListener { def actionPerformed(e: ActionEvent) {f}}

定义以后(事物:=>单位){SwingUtilities.invokeLater(新运行的{ def run() { thing } }) }

就我个人而言,我希望Scala Swing也走了这条路。为现有Java类编写包装器的时间为O(n),对于作者没有选择为其编写包装器的类,它不会给您带来任何好处。

  • 得到了一个所见即所得但灵活的图形用户界面构建器:我使用IntelliJ IDEA forms来创建一个抽象类,然后用Scala类将其子类化。组织成本只是一个额外的文件,而且我没有编写Java文档:是的。
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10497118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档