问题 clojure中的复杂GUI


我今天刚开始使用clojure(但是,我已经使用了很多Java并且知道了功能范例)我想知道用一个合理的复杂界面构建一个clojure应用程序是否是一个好主意(拖放,删除,平移,缩放, ...)使用Swing?

我可以想象很多正常的摆动逻辑(特别是关于OO)必须以某种方式绕过它们。

我认为一切皆有可能,但是有可能以合理的方式进行吗?

我的意思是不是用螺丝刀而不是用锤子敲钉子?

这里有没有人有过使用Clojure构建GUI的经验(当然:Swing是理想的候选人吗?)

谢谢 !


9804
2018-02-04 20:14


起源



答案:


我发现使用Swing在Clojure中构建合适的用户界面相对容易。但是,您有几个方法可以做到这一点:

  • 像在Java中一样编写代码,只需使用Clojure中的Java interop来调用相关的Swing API。 本文 很好地解释了如何使用一些宏观魔法来让你的生活更轻松。
  • 使用Clojure GUI包装器进行Swing,例如: 跷跷板 要么 CLJ-摇摆。我的看法是这些工具有可能帮助你在惯用的Clojure中编写一些非常简洁的GUI代码

9
2018-02-04 20:32



谢谢,我看到它可以完成,但是可以增加复杂性(我可以在Java / swing中使用handel)成为后来构建应用程序的nogo?是不是有可以被忽视的东西?在Swing中,我曾经构建了自己的MVC(datachange触发了GUI):我想这还有可能吗?给定的例子再次很好,很有用,但仍然非常简单...... - Peter
在Clojure中你没有在Swing / Java中做任何事情 - 如果你需要,最终可以通过Java互操作调用任何Swing / Java函数。当然,您需要在应用程序增长时管理复杂性,但我认为这在Clojure中实际上比Java / Swing更容易(因为更高阶函数,最小样板,宏等) - mikera
您可能还想查看我编写的库以方便GUI编程: github.com/jonasseglare/signe。它允许您将表示为不可变数据结构的程序状态包装在单个原子中。我提供了三个例子来说明它是如何工作的。 - Rulle


答案:


我发现使用Swing在Clojure中构建合适的用户界面相对容易。但是,您有几个方法可以做到这一点:

  • 像在Java中一样编写代码,只需使用Clojure中的Java interop来调用相关的Swing API。 本文 很好地解释了如何使用一些宏观魔法来让你的生活更轻松。
  • 使用Clojure GUI包装器进行Swing,例如: 跷跷板 要么 CLJ-摇摆。我的看法是这些工具有可能帮助你在惯用的Clojure中编写一些非常简洁的GUI代码

9
2018-02-04 20:32



谢谢,我看到它可以完成,但是可以增加复杂性(我可以在Java / swing中使用handel)成为后来构建应用程序的nogo?是不是有可以被忽视的东西?在Swing中,我曾经构建了自己的MVC(datachange触发了GUI):我想这还有可能吗?给定的例子再次很好,很有用,但仍然非常简单...... - Peter
在Clojure中你没有在Swing / Java中做任何事情 - 如果你需要,最终可以通过Java互操作调用任何Swing / Java函数。当然,您需要在应用程序增长时管理复杂性,但我认为这在Clojure中实际上比Java / Swing更容易(因为更高阶函数,最小样板,宏等) - mikera
您可能还想查看我编写的库以方便GUI编程: github.com/jonasseglare/signe。它允许您将表示为不可变数据结构的程序状态包装在单个原子中。我提供了三个例子来说明它是如何工作的。 - Rulle


Clojure的一个非常酷的功能 软件事务内存 子系统是它允许你在变量上设置监视:每当变量(通过任何东西)改变时,你的回调就会被执行。这有助于实现一种强大的GUI编程,其中GUI根据变量的状态自动更新自身。

下面详细介绍一个简短但非平凡的Swing GUI示例 http://www.paullegato.com/blog/swing-clojure-gui-black-scholes/ 。


6
2018-02-07 03:44





由于其他人提到与答案相关的答案,我会问你一个问题:Swing是一个要求。虽然在clojure中编写Swing代码比在Java中更令人愉快,但它仍然是Swing,具有所有冗长和烦恼,特别是在具有硬设置要求的复杂应用程序中。

您是否考虑过Web UI,Clojure更适合自然?要么 SWT 要么 QT Jambi,也可以使用Clojure工作。


1
2018-02-07 15:14



+1:没有挥杆是没有要求的,这就是为什么我说:(当然:Swing是理想的候选人吗?)当然我有一些Swing的经验,我认为这是一个加号。 - Peter