【问题标题】:GUI in Scala/Groovy/ClojureScala/Groovy/Clojure 中的 GUI
【发布时间】:2011-03-20 11:10:55
【问题描述】:

我上一次接触 Java 是在 2005 年,从那以后我几乎忘记了它的一切。

今天我需要在 Java 之上构建一个 GUI 应用程序。我想最好使用 Scala/Groovy/Clojure 语言之一。

问题是:哪一个更适合桌面 GUI 编程?我的程序将转换并显示一系列 jpeg/png 文件 + 将有大约 10 个对话框(每个对话框中都有大量选项以及所有可能的小部件)。

主要要求是紧凑性:我讨厌编写十几行代码只是为了绘制一个带有按钮的简单框架。我在 GUI 方面的背景(主要是)Tcl/Tk 和 GTK+。

【问题讨论】:

    标签: scala user-interface groovy clojure


    【解决方案1】:

    Groovy 有一个叫做swing builder 的东西,可以让 GUI 编程更容易。这是来自 groovy 网站的一段示例代码,它创建一个带有按钮的框架并计算您单击它的次数:

    int count = 0
    new SwingBuilder().edt {
      frame(title:'Frame', size:[300,300], show: true) {
        borderLayout()
        textlabel = label(text:"Click the button!", constraints: BL.NORTH)
        button(text:'Click Me',
             actionPerformed: {count++; textlabel.text = "Clicked ${count} time(s)."; println "clicked"},
             constraints:BL.SOUTH)
      }
    }
    

    【讨论】:

      【解决方案2】:

      Scala 为基本的 GUI 元素提供了相当完整的示例应用程序,您可以通过在命令行中键入 scala scala.swing.test.UIDemo 来运行这些应用程序。您可以浏览他们的源代码here

      您还可以查看 this document 以了解 Scala 的 Swing 包装器背后的设计原则。

      【讨论】:

      • A) 感谢关于 UI 演示的小彩蛋。我不知道它的存在。它的来源可用吗? B) 经过大约五年的标准 Java swing 经验后,我本周末开始使用 Scala swing 包装器。学习曲线不止一点点。如果您不熟悉 GUI 编程,可能会更容易。我将很快发表一篇博文,重点介绍其中的一些差异。
      • @I82Much 答案有源代码链接。它还应该附带标准的 Scala 发行版——其中包括编译器和库的源代码——也可以通过 git 和 subversion 获得。
      • @I82Much 另外,我很想看到那篇博文。我认为 Scala 缺乏关于 GUI 编程的博客文章。
      • 我正在 Scala 中制作一个扫雷克隆。就快结束了。当它是可发布的形式时,我会在 cmets 中放一个链接。
      • @I82Much 你完成那个扫雷应用了吗?
      【解决方案3】:

      我一直在通过将 Clojure 与 Swing 直接结合使用来编写 GUI。到目前为止,它确实运作良好。我还用 Java 编写了一些自定义 UI 组件,事实证明这些组件很容易与代码库的 Clojure 部分集成。

      我还认为clj-swing 看起来很棒 - 如果您之前没有 Swing 经验,可能比直接使用 Swing 更容易。

      【讨论】:

        【解决方案4】:

        Groovy 具有 Griffon 框架,该框架使用约定优于配置在 JVM 上构建 GUI 应用程序。它类似于 grails/rails,但用于丰富的 GUI 而不是 Web 应用程序。

        【讨论】:

        • 我不知道 griffon 的 mutch,但没有说他们想要 jruby 和 clojure 的包装器?记得听到类似的话。
        • Griffon 通过插件支持多语言编程。 Groovy、Java、Clojure、Scala、Mirah、Jython 是您可以使用的一些语言。
        【解决方案5】:

        我目前正在用 Scala 开发一个 SWT 应用程序,我非常喜欢它。但我确实希望 Clojure 会更加紧凑。

        【讨论】:

          【解决方案6】:

          免责声明:我是 Clojure 程序员。我显然有偏见。

          在所有这些语言中,我认为 Clojure 和 Groovy 可能是最紧凑的。 Scala 是一种类似于 Java 的大括号语言,因此它往往会占用更多空间。然而,它远没有 Java 那样冗长,而且我认为 Scala 非常棒。我知道 Scala 有一个摆动包装器。我从来没有在 Scala 中进行过 GUI 开发,所以我真的说不出是什么感觉。

          我在 Clojure 中进行了一些摇摆开发,实际上并不需要太多。在您自己编写一些抽象之前,直接从 Clojure 使用 swing 可能会很乏味,但总的来说,swing 应用程序比 Java 中的相同应用程序更小,因为 Clojure 代码往往比 Java 代码更短更简洁。

          Clojure 也有一些包装器,可以让 Swing 开发更接近 Clojury。其中之一是clj-swing。我看过一些使用它编写的代码,它非常酷,而且绝对比直接互操作更简洁。

          现在,我不知道 Groovy。我真的不太了解它,但我知道它比 Java 更紧凑,所以我想 GUI 开发也会相当紧凑。

          我认为 Clojure 是一个安全的选择。与 Java 相比,使用 clj-swing,甚至直接使用 Java GUI 工具包将非常紧凑,并且使用宏在非紧凑的东西上构建抽象的能力绝对是一个巨大的优势。 Clojure 有我的投票权。

          【讨论】:

          • 就个人而言,我认为 Clojure 对于可能需要由许多开发人员长期维护的生产代码来说过于晦涩和不成熟(尽管我不知道这是否适用于这个项目)。我并不是说它是一种好/坏的语言,但它与 Java 的区别太大,Java 开发人员无法轻松掌握它。
          • 如果他在工作中可以选择这些语言,显然,他们不会觉得它“对于生产代码来说太晦涩和不成熟”。我认为你应该让他决定,因为这是他的申请。除此之外,我知道有几家公司使用 Clojure 作为他们/他们的主要语言之一,并为此感到自豪。
          • 我以前用过跷跷板 (github.com/daveray/seesaw),它非常紧凑和优雅。它还可以很好地与 Clojure 的数据结构配合使用,可以在两个方向上轻松绑定原子和摆动组件。
          猜你喜欢
          • 1970-01-01
          • 2012-01-13
          • 2011-04-03
          • 1970-01-01
          • 2010-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多