【问题标题】:Menu item example in Clojure seesawClojure 跷跷板中的菜单项示例
【发布时间】:2014-03-06 10:24:46
【问题描述】:

尝试在跷跷板上制作菜单。我不知道“项目”新动作开放动作等应该在 main.js 内部的下面的代码中是什么。我认为它可能是菜单项文本,或者可能是函数回调。最终,如果有一个示例来说明如何控制菜单项文本,然后能够在我的代码中提供回调,那就太好了。不知道该怎么做。

修改:此代码现在可以正常工作。

(ns hello-seesaw.core
  (:gen-class)
  (:use seesaw.core))

(defn handler
  [event]
  (alert event
    (str "<html>Hello from <b>Clojure</b>. Button "
      (.getActionCommand event) " clicked.")))

(defn menu-handler
  [event]
  ()
)

(def new-action   (menu-item :text "New"   :listen [:action menu-handler]))
(def open-action  (menu-item :text "Open"  :listen [:action menu-handler]))
(def save-action  (menu-item :text "Save"  :listen [:action menu-handler]))
(def exit-action  (menu-item :text "Exit"  :listen [:action menu-handler]))
(def copy-action  (menu-item :text "Copy"  :listen [:action menu-handler]))
(def paste-action (menu-item :text "Paste" :listen [:action menu-handler]))


(defn -main [& args]
  (invoke-later
        (->
                (frame :title "Hello Swing" :on-close :exit
                :content (button :text "Click Me" :listen [:action handler])
                :menubar
                        (menubar :items
                        [
                                (menu :text "File" :items [new-action open-action save-action exit-action])
                                (menu :text "Edit" :items [copy-action paste-action])
                        ]
                        )
                )
        pack!
        show!))
)

【问题讨论】:

    标签: clojure seesaw


    【解决方案1】:

    每个*-action 项都指一种菜单项(menu-itemcheckbox-menu-itemradio-menu-item)。其中每个都有same optionsbutton,因此您可以像在第一帧中配置按钮一样配置每个。

    您对新按钮的定义可能如下所示:

    (def new-action (menu-item :text "New" :listen [:action handler]))
    

    顺便说一句,如果您尝试在定义了两个帧的情况下运行程序,您将得到一个IllegalArgumentException(因为您将第一个帧调用的结果传递给第二个帧)。一个简单的解决方案是将两者结合起来。

    (frame :title "Hello Swing" :on-close :exit
               :content (button :text "Click Me" :listen [:action handler])
               :menubar
               (menubar :items
                        [(menu :text "File" :items [new-action open-action save-action exit-action])
                         (menu :text "Edit" :items [copy-action paste-action])]))
    

    【讨论】:

    • 谢谢。请参阅原始帖子中的修改部分。现在我在线程“AWT-EventQueue-0”中得到异常 java.lang.IllegalArgumentException: opts must be a map or have an even number of entries at seesaw.util$check_args.invoke(util.clj:23) ...
    • 好的,您粘贴的代码有两个小问题。第一个是您在最后缺少一个结束括号(考虑到您遇到的错误,可能只是没有从您的源复制)。另一个是frame 调用在错误的地方关闭。在您修改后的代码中,它在以:content 开头的行的末尾关闭。将一个右括号从该行移动到包含菜单项数组的最后一个元素的行的末尾。经过这两个小改动后,我就可以执行你的代码了。
    • 谢谢。我让它工作了。有关最终工作代码,请参见上面的修改部分。一件事,我真的不知道格式化“lisp”样式代码的最佳实践是什么。有没有地方显示如何“正确”缩进?
    • 我尝试关注community style guide
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2016-05-31
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多