2

シーソーでメニューを作ってみました。メイン内の以下のコードで「アイテム」の新しいアクションのオープンアクションなどが想定されているものを理解できません。メニュー項目のテキストか、関数のコールバックではないかと思いました。最終的には、メニュー項目のテキストを制御する方法を示す例があり、コードでコールバックを提供できるとよいでしょう。これを行う方法がわかりません。

変更: このコードは正しく機能するようになりました。

(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!))
)
4

1 に答える 1