Dav*_*Ray 116
我会谦卑地建议跷跷板.
这是一个基于REPL的教程,假设没有Java或Swing知识.
跷跷板很像@tomjen所说的.这是"Hello,World":
(use 'seesaw.core)
(-> (frame :title "Hello"
:content "Hello, Seesaw"
:on-close :exit)
pack!
show!)
Run Code Online (Sandbox Code Playgroud)
这里是@Abhijith和@dsm的例子,字面翻译得很漂亮:
(ns seesaw-test.core
(:use seesaw.core))
(defn handler
[event]
(alert event
(str "<html>Hello from <b>Clojure</b>. Button "
(.getActionCommand event) " clicked.")))
(-> (frame :title "Hello Swing" :on-close :exit
:content (button :text "Click Me" :listen [:action handler]))
pack!
show!)
Run Code Online (Sandbox Code Playgroud)
ste*_*lig 32
Stuart Sierra最近发布了一系列关于使用clojure(和swing)进行GUI开发的博客文章.从这里开始:http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing
pup*_*eno 16
Swing中的许多内容都是通过子类化完成的,特别是在创建自定义组件时.为此,有两个基本功能/宏:代理和gen-class.
现在,我了解更多Lispy方式.我认为还没有那样的东西.我强烈建议不要尝试构建一个宏大的GUI构建框架a-la CLIM,而是做更多的Lispy:开始编写Swing应用程序并用宏来抽象出你的常见模式.在这样做时,您最终可能会使用一种语言来编写您的GUI,或者可能是一些可以共享和增长的非常通用的东西.
在Clojure中编写GUI时丢失的一件事是使用像Matisse这样的工具.这可以强烈指向在Java(GUI)和Clojure(逻辑)中编写一些部分.这实际上是有意义的,因为在逻辑上你将能够使用宏为你的逻辑构建一种语言,我认为除了GUI之外还有更多的东西可以获得.显然,这取决于您的应用程序.
dsm*_*dsm 14
从这个页面:
(import '(javax.swing JFrame JButton JOptionPane)) ;'
(import '(java.awt.event ActionListener)) ;'
(let [frame (JFrame. "Hello Swing")
button (JButton. "Click Me")]
(.addActionListener button
(proxy [ActionListener] []
(actionPerformed [evt]
(JOptionPane/showMessageDialog nil,
(str "<html>Hello from <b>Clojure</b>. Button "
(.getActionCommand evt) " clicked.")))))
(.. frame getContentPane (add button))
(doto frame
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
.pack
(.setVisible true)))
print("code sample");
Run Code Online (Sandbox Code Playgroud)
当然,值得关注clojure网站的互操作性部分.
Mat*_*ard 14
还没人建议,所以我会:浏览器作为UI平台.您可以在Clojure中编写应用程序,包括HTTP服务器,然后使用从HTML到打嗝,ClojureScript以及您需要的任何数十亿个JS库中的任何内容开发UI .如果您想要一致的浏览器行为和"桌面应用程序look'n'feel",您可以将chrome与您的应用程序捆绑在一起.
这似乎是Light Table的分布方式.
在clojure contrib中有一个MigLayout的包装器.你也可以看看http://gist.github.com/261140.因为我正在学习swing/miglayout,所以我基本上都会提出我正在编写的代码.
dsm的示例使用contrib.swing-utils以lispy方式重写
(ns test
(:import (javax.swing JButton JFrame))
(:use (clojure.contrib
[swing-utils :only (add-action-listener)])))
(defn handler
[event]
(JOptionPane/showMessageDialog nil,
(str "<html>Hello from <b>Clojure</b>. Button "
(.getActionCommand event) " clicked.")))
(let [ frame (JFrame. "Hello Swing")
button (JButton. "Click Me") ]
(add-action-listener button handler)
(doto frame
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
(.add button)
(.pack)
(.setVisible true)))
Run Code Online (Sandbox Code Playgroud)
小智 5
我宁愿选择clojurefx,它有点过早,但它确实有效并节省您的时间.
我用跷跷板开始我的GUI,然后在clojurefx中尝试了另一个组件.
我已经完成了两个,我相信我要将跷跷板重构为clojurefx.
毕竟,JavaFX是前进的方式.
它感觉比跷跷板轻.或者至少,写它..
绑定工作,监听器工作,大多数组件工作,否则,只需使用其中一个宏为特定案例和工作完成创建构造函数.或者,如果您觉得困难,请在Java中编写一些方法并寻求帮助以改进clojurefx.
编写clojurefx的人现在很忙,但你可以分叉项目并做一些修复.
| 归档时间: |
|
| 查看次数: |
42297 次 |
| 最近记录: |