【问题标题】:How to use sliders in clojure seesaw如何在 clojure 跷跷板上使用滑块
【发布时间】:2016-05-31 09:39:27
【问题描述】:

我是 clojure 的新手(甚至是跷跷板的新手),但有很多 Java 经验和相当多的摇摆经验。

我正在尝试创建一个带有一些下拉文本框和一个滑块的窗口。但是,我无法将所有片段显示在一个窗口上(而不是一次显示一个窗口),并且由于某种原因没有显示滑块。

我真的找不到很多关于这方面的教程,所以也许我遗漏了一些明显的东西。

这就是我想要做的......

    (defn window [cuisine-input rating-input location-slider]
        (seesaw/frame
        :title "Resturant Selector"
        :content (cuisine-input rating-input location-slider)
        :width 200
        :height 50
        :on-close :exit))


    (defn -main
    [& args]

        (def cuisine (seesaw/input "Please choose a type of cuisine: "
                           :choices ["Indian" "Japanese" "Chinese"
                                     "Burgers"]))

        (def rating (seesaw/input "Please choose the ideal rating: "
                        :choices ["1 star" "2 stars" "3 stars" "4 stars" 
                                  "5 stars"]))
        (def location (seesaw/slider 
                             :value 5 :min 0 :max 20 
                             :minor-tick-spacing 1 :major-tick-spacing 2 
                             :snap-to-ticks? true 
                             :paint-ticks? true :paint-labels? true))

        (def main-window (window cuisine rating location))
        (seesaw/pack! (window main-window))
        (seesaw/show! (window main-window))

)

我也试过这样的:

    (seesaw/frame :title "Resturant Selector" :on-close :exit
            :content (:items [ 
                     (seesaw/input "Please choose a type of cuisine: "
                           :choices ["Indian" "Japanese" "Chinese"
                                    "Burgers"])

                     (seesaw/input "Please choose the ideal rating: "
                        :choices ["1 star" "2 stars" "3 stars" "4 stars" 
                                  "5 stars"])

                     (seesaw/slider
                       :value 5 :min 0 :max 20
                       :minor-tick-spacing 1 :major-tick-spacing 2
                       :snap-to-ticks? true
                       :paint-ticks? true :paint-labels? true)]
                              )
            )

【问题讨论】:

  • 我不知道 Seesaw,但我注意到自 Clojure 1.4.0 以来 git repo 没有更新。如果您使用的是更高版本的 Clojure,我想知道这是否是问题的一部分。
  • 尝试将(seesaw/pack! (window main-window)) (seesaw/show! (window main-window))更改为(seesaw/pack! main-window) (seesaw/show! main-window)

标签: clojure seesaw


【解决方案1】:

seesaw/input 创建一个input dialog,而您想创建一个JComboBoxwiki 对如何创建小部件有很好的帮助,您可以在 API doc 中找到可用小部件的列表。

要在a frame 中拥有多个小部件,您需要a container

因此,对于您的特定示例,您将需要类似以下内容:

(defn window [content]
  (seesaw/frame
    :title "Resturant Selector"
    :content content
    :width 200
    :height 50
    :on-close :close))

(defn -main
  [& args]
  (let [rating-label (seesaw/label :text "Please choose rating:")
        rating (seesaw/combobox :model ["1 star" "2 star"])
        location (seesaw/slider
                   :value 5 :min 0 :max 20
                   :minor-tick-spacing 1 :major-tick-spacing 2
                   :snap-to-ticks? true
                   :paint-ticks? true :paint-labels? true)

        main-window (window (seesaw/vertical-panel :items [rating-label rating location]))]
    (seesaw/invoke-later
      (seesaw/pack! main-window)
      (seesaw/show! main-window))))

【讨论】:

  • 谢谢,这正是我想要的。我真的很感激。
  • @LucasRudd 考虑在此答案旁边放置一个绿色复选标记。干杯!
猜你喜欢
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 2014-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
相关资源
最近更新 更多