当前位置:  开发笔记 > 编程语言 > 正文

在Clojure中进行GUI的最佳方法是什么?

如何解决《在Clojure中进行GUI的最佳方法是什么?》经验,为你挑选了8个好方法。

在Clojure中进行GUI的最佳方法是什么?

有一些功能性Swing或SWT包装器的例子吗?或者与JavaFX声明性GUI描述的某些集成,可以使用一些宏观程序轻松地包装到s表达式?

任何教程?



1> Dave Ray..:

我会谦卑地建议跷跷板.

这是一个基于REPL的教程,假设没有Java或Swing知识.


跷跷板很像@tomjen所说的.这是"Hello,World":

(use 'seesaw.core)

(-> (frame :title "Hello"
       :content "Hello, Seesaw"
       :on-close :exit)
  pack!
  show!)

这里是@Abhijith和@dsm的例子,字面翻译得很漂亮:

(ns seesaw-test.core
  (:use seesaw.core))

(defn handler
  [event]
  (alert event
    (str "Hello from Clojure. Button "
      (.getActionCommand event) " clicked.")))

(-> (frame :title "Hello Swing" :on-close :exit
           :content (button :text "Click Me" :listen [:action handler]))
  pack!
  show!)


没有必要谦虚 - 你可以为这一个感到自豪!+1!
-1:您的代码中存在错误.它说"Hello,Seesaw"而不是"Hello,World".
让Swing好玩吗?他们说不可能!

2> steglig..:

Stuart Sierra最近发布了一系列关于使用clojure(和swing)进行GUI开发的博客文章.从这里开始:http://stuartsierra.com/2010/01/02/first-steps-with-clojure-swing



3> pupeno..:

如果你想进行GUI编程,我会指向温度转换器或蚂蚁殖民地.

Swing中的许多内容都是通过子类化完成的,特别是在创建自定义组件时.为此,有两个基本功能/宏:代理和gen-class.

现在,我了解更多Lispy方式.我认为还没有那样的东西.我强烈建议不要尝试构建一个宏大的GUI构建框架a-la CLIM,而是做更多的Lispy:开始编写Swing应用程序并用宏来抽象出你的常见模式.在这样做时,您最终可能会使用一种语言来编写您的GUI,或者可能是一些可以共享和增长的非常通用的东西.

在Clojure中编写GUI时丢失的一件事是使用像Matisse这样的工具.这可以强烈指向在Java(GUI)和Clojure(逻辑)中编写一些部分.这实际上是有意义的,因为在逻辑上你将能够使用宏为你的逻辑构建一种语言,我认为除了GUI之外还有更多的东西可以获得.显然,这取决于您的应用程序.


我想知道什么时候我们得到第一个clojure输出GUI设计师.由于同质性,生成的代码甚至不应该是坏的!
不要担心失去马蒂斯.您可以使用http://www.miglayout.com/,它足够强大,您可以手动完成布局.

4> dsm..:

从这个页面:

(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 "Hello from Clojure. Button "
               (.getActionCommand evt) " clicked.")))))

 (.. frame getContentPane (add button))

 (doto frame
   (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
   .pack
   (.setVisible true)))

print("code sample");

当然,值得关注clojure网站的互操作性部分.


是的,我知道你可以直接回归使用Swing,但是我觉得是否有更多的lispy方式.

5> Matthew Gill..:

还没人建议,所以我会:浏览器作为UI平台.您可以在Clojure中编写应用程序,包括HTTP服务器,然后使用从HTML到打嗝,ClojureScript以及您需要的任何数十亿个JS库中的任何内容开发UI .如果您想要一致的浏览器行为和"桌面应用程序look'n'feel",您可以将chrome与您的应用程序捆绑在一起.

这似乎是Light Table的分布方式.



6> Abhijith..:

在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 "Hello from Clojure. 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)))



7> 小智..:

有许多人在邮件列表上的谈话大约几格(一拉肯尼蒂尔顿的细胞)的实现.这是一种非常巧妙的GUI编程方式.



8> 小智..:

我宁愿选择clojurefx,它有点过早,但它确实有效并节省您的时间.

我用跷跷板开始我的GUI,然后在clojurefx中尝试了另一个组件.

我已经完成了两个,我相信我要将跷跷板重构为clojurefx.

毕竟,JavaFX是前进的方式.

它感觉比跷跷板轻.或者至少,写它..

绑定工作,监听器工作,大多数组件工作,否则,只需使用其中一个宏为特定案例和工作完成创建构造函数.或者,如果您觉得困难,请在Java中编写一些方法并寻求帮助以改进clojurefx.

编写clojurefx的人现在很忙,但你可以分叉项目并做一些修复.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有