2011-02-04 26 views
11

我剛開始使用clojure(但是,我已經使用了很多Java並瞭解了功能範例),並且想知道是否用合理的複雜接口構建clojure應用程序是一個好主意(拖動,放下,平移,縮放......)使用Swing?clojure中的複雜GUI

我可以想像,很多普通擺動邏輯(特別是關於OO)的,必須繞過一個或其他方式..

我asume全部是可行的,但有可能的方式, justifyable?

我的意思是說,不是用錘子打螺絲刀而是用釘子打釘子?

有沒有人在這裏建立GUI的使用Clojure有經驗的(當然:鞦韆是爲理想人選?)

謝謝!

回答

9

我發現使用Swing在Clojure中構建體面的用戶界面相對容易。你有一個關於但是如何做到這一點的情侶選擇:

  • 編寫代碼幾乎就像在Java中,僅僅使用Java的互操作Clojure的從調用相關的API鞦韆。 This article做了一個很好的解釋如何,與一些宏魔術以及讓你的生活更輕鬆。
  • 對Swing使用Clojure GUI包裝器,例如seesawclj-swing。我的看法是,這些工具已經幫你寫一些很整潔GUI代碼中慣用的Clojure潛在
  • Clojure的 software transactional memory子系統的
+0

謝謝,我看到它可以完成,但是可以增加複雜性(我可以在Java/swing中處理)在構建應用程序後會成爲nogo嗎?是不是有可以忽略的東西?在Swing中,我用來構建自己的MVC(datachange觸發GUI):我想這仍然是可能的?再次給出的例子很好用,但仍然非常微不足道...... – Peter 2011-02-04 20:55:00

+0

在Clojure中,您無法在Swing/Java中做任何事情 - 最終可以通過Java interop調用任何Swing/Java函數如果你需要。當然,隨着應用程序的增長,你需要管理複雜性,但我認爲Clojure實際上比Java/Swing更容易實現(因爲更高階的函數,最少的樣板,宏等)。 – mikera 2011-02-08 08:08:50

6

一個很酷的功能是它允許您設置表上的變量:每當變量改變(任何事情),你的回調得到執行。這適用於一種強大的GUI編程,其中GUI根據變量的狀態自動進行自我更新。

http://www.paullegato.com/blog/swing-clojure-gui-black-scholes/上詳細描述了一個簡短而不平凡的Swing GUI示例。

1

由於其他人提到與鞦韆相關的答案,我會問你一個問題:是Swing的一個要求。儘管在clojure中編寫Swing代碼比在Java中更令人愉快,但它仍然是Swing,具有所有的冗長和煩惱,特別是在複雜應用程序和硬件需求方面。

您是否考慮過Web UI,Clojure更適合自然嗎?或SWTQT Jambi,也可以使用Clojure工作。