这是一个菜鸟问题,所以如果我冒犯了某人,我很抱歉.
但是如何在*nix计算机上安装跷跷板?是的,我已经阅读了README.MD文件,但是project.clj如何知道在哪里找到库jar(例如跷跷板)?
当按下F11时,如何使我的跷跷板程序全屏显示?(不只是最大化)
我目前有这个:
(defn toggle-full-screen [e]
(-> (to-root e)
magic!)
(def full-screen-action (action :name "Full Screen" :tip "Full Screen"
:mnemonic \f :key (keystroke "F11")
:handler toggle-full-screen))
(def view-menu (menu :text "View"
:mnemonic \v
:items [full-screen-action]))
(def top-menubar (menubar :items [view-menu]))
[...]
Run Code Online (Sandbox Code Playgroud)
toggle-full-screen
在按下F11时运行,但我无法弄清楚如何使框架全屏.
这就是我想做的事情:
我有一个代表项目列表的参考.我想要一个列表框(跷跷板?)显示此列表内容,自动更新(每当我更改参考时).
我想要一个简单的时间轴组件(如视频编辑软件)用于clojure/seesaw应用程序,我想知道它是一个很好的方法直接用clojure和跷跷板实现这个或者我是否应该在java中编写它并使我的clojure包装器周围.
或者更一般地说:是一种最适合编写UI小部件的函数式编程语言?没有很多国家参与,我无法想象这样做.并不是首先为UI开发发明的OO?
我一直在使用seesaw.tree/simple-tree-model来创建我的TreeModel,文档说这是只读的.最初我不需要编辑树结构但是现在我做了!
在跷跷板中有一个拉动请求可以添加update-tree!
.虽然这是8个月大.
使用seesaw/clojure创建和编辑JTree的最佳方法是什么?
我对跷跷板表有问题。当我尝试组成并显示一个简单的表时,它显示时没有列名。
我做了什么:
首先,我必须说我正在使用[seesaw "1.4.2"]
。
然后:
;; Clojure 1.4.0
(require '[seesaw.core :as ss])
(ss/native!)
(def main-window
(-> (ss/frame
:title "Main window")
ss/pack!
(ss/config! :minimum-size [320 :by 240])
ss/show!))
(def display
#(ss/config! main-window
:content %))
(display
(ss/table
:id :dumb-table
:model [:columns
[:one :another]
:rows
[["1" "2"]
["3" "4"]]]))
Run Code Online (Sandbox Code Playgroud)
我得到的是http://img.leprosorium.com/1663368
表,但没有列名,我想它必须是“一个”和“另一个”。这里出了什么问题?
如果我使用与官方Wiki中完全相同的代码,也会发生这种情况:https : //github.com/daveray/seesaw/wiki/Tables
我忘了提,我正在使用JDK 1.7u10,也许这很有意义。
要在Seesaw中为UI元素添加侦听器,请执行以下操作:
(listen ui-element :action (fn [_] (...)))
Run Code Online (Sandbox Code Playgroud)
listen
附加一个监听器,当:action
在`ui-element1上触发时调用提供的函数.它还返回一个函数.如果执行该函数,则会删除随原始调用添加的侦听器.
我一直在使用Seesaw在REPL中对UI进行原型设计,并且我没有保留返回值listen
.
如果我没有返回的函数,我该如何删除监听器?
我想在我的clojure应用程序中为面板背景设置自定义图像.使用跷跷板,我可以为背景设置一些颜色:
(defn make-panel []
(border-panel
:north (flow-panel :align :center
:items [(label :text "TEXT")])
:center (canvas :class :board
:background :black)
:border 5))
Run Code Online (Sandbox Code Playgroud)
但如何使用其网址选择图像?
我在使用Clojure和Seesaw编写功能样式的事件驱动GUI代码时遇到了麻烦.具体来说,我无法弄清楚如何在不使用全局变量或其他一些令人不快的黑客的情况下传递程序的状态.我目前的做法是这样的:
(defn event-handler [gui-state event]
(update-gui! (get-new-state gui-state event)))
(defn update-gui! [gui-state]
(remove-all-listeners (gui-state :button))
(seesaw.core/listen (gui-state :button)
:action
(partial event-handler gui-state)))
Run Code Online (Sandbox Code Playgroud)
它在相关组件上设置一个事件监听器,并使用部分应用的函数来推进状态并更新gui,包括删除旧的监听器.虽然这似乎有效,但我并不喜欢它,部分是因为我无法在状态中传递监听器(因为它在我已经定义状态之后才构建),所以删除旧的监听器需要删除所有侦听器,这可能会在程序增长时导致问题.
我在网上找到的最接近的解决方案是在这个答案中,但我不知道如何像它显示的那样处理事件.我确信必须有一个比我目前的方法更好的解决方案,但我无法弄清楚是什么.
任何人都可以告诉我如何在仍然遵循功能风格的同时响应用户输入事件?
我正在使用跷跷板在Swing中编程接口.
我想显示项目符号列表.单击一个项目时,我希望调用一个事件处理程序.
我设法让事件处理程序为组件/小部件工作,我可以通过将HTML插入Label中轻松地显示项目符号列表.我认为如果没有别的可能,我可能需要捕获父项的鼠标点击事件并计算出偏移量.
使用事件处理程序获得可点击项目符号列表的最佳方法是什么?
http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html#getKeyCode()
我不知道如何测试按下的键是否为Enter.使用以下锅炉板和(alert ...)
.我已经设法确定事件e是一个KeyEvent,从它的文档我看到有一个常量VK_Enter
来表示Enter和三个方法getKeyChar,getKeyCode和getKeyText.使用(alert e)
它似乎getKeyChar返回Enter,或者至少用Enter String表示的东西,但(= (.getKeyChar e) "Enter")
返回false.如何检测Enter被按下?
(-> (frame :title "Zangalon" :content
(text :text "Input Goes here"
:listen [:key-typed (fn [e] ..)]))
pack!
show!)
Run Code Online (Sandbox Code Playgroud)
VK_ENTER
我有一个带文本编辑器的跷跷板ui.编辑器内容由名为"Task"的记录支持,该记录包含在名为"state"的原子中.编辑器上的密钥释放事件应该更改属性:任务的desc.我使用以下代码:
(def state
(atom {:tasks []
:interval nil
:style (style :foreground :black :background nil)}))
(defn on-text-edited [ui listener-fn]
(let [editor (select ui [:#editor])]
(listen editor :key-released
(fn [evt] (listener-fn (text editor))))))
(defn update-task! [task text]
(let [newtask (assoc task :desc text)
tasks (replace {task newtask} (:tasks @state))]
(swap! state
#(assoc % :tasks tasks))))
(def text-updates (on-text-edited frame #(update-task! selected-task %)))
Run Code Online (Sandbox Code Playgroud)
selected-task是一个引用编辑器当前内容模型的atom.每当用户编辑更新任务的文本时!函数应该被调用.但没有任何反应.该函数似乎根本没有被调用.当我从repl调用它时,它的行为与预期一致.
我测试了函数是否会通过让它执行一个简单的println来调用它:
(defn update-task! [task text]
(println (str task " " text)))
Run Code Online (Sandbox Code Playgroud)
现在,当我在编辑器中编辑文本时,该功能正常工作.然后我把它改为:
(defn update-task! [task text]
(let [newtask …
Run Code Online (Sandbox Code Playgroud) clojure ×12
seesaw ×12
swing ×5
events ×2
background ×1
fullscreen ×1
image ×1
jtree ×1
listbox ×1