簡體   English   中英

等待clojure中的按鍵

[英]Wait for a keypress in clojure

我用蹺蹺板創建了一個java框架

(def f (frame :title "my app"))

我想抓住用戶按鍵。

我試圖在這里和那里收集代碼並以此結束

(ns myapp.core
  (:use seesaw.core)
  (:use seesaw.font)
  (:import [java.awt.event ActionListener KeyListener KeyEvent])
)

(defn input-listener []
(proxy [ActionListener KeyListener] []
  (actionPerformed [e])
  (keyPressed [e] (alert e "You pressed a key!"))
  (keyReleased [e])
  (keyTyped [e])))

(doto f
  (.addKeyListener (input-listener)))

但它根本不起作用。 我是clojure的新手,因為我絕對不知道任何JAVA(並且真的不想進入它)我有點迷失。 有沒有一種簡單的方法來捕獲整個應用程序中鍵盤快捷鍵的用戶輸入?

請幫助。

如果您只想將特定按鍵映射到幀中的不同函數,則seesaw.keymap / map-key可能是您想要的:

; When 'e' is pressed in frame f, call this function
(map-key f "e" (fn [_] (... do something ))

(這都建立在鍵綁定的東西@Bill引用之上)

有關詳細信息,請查看map-key的文檔。 正如其他答案所暗示的那樣,Swing中的鍵盤處理甚至比Swing的其余部分更糟糕,所以要為一些痛苦做好准備:)

蹺蹺板很棒,但找到如何做你想做的事情仍然有點棘手,特別是如果(像我一樣)你不是Swing專家。 通常不需要進入Java API,特別是對於這么簡單的事情。 這對我有用:

(ns so.core
  (:use seesaw.core))

(let [f (frame :title "my app")
      handler (fn [e] (alert "pressed key!"))]
  (listen f :key-pressed handler)
  (show! f))

不幸的是, 這個不錯的蹺蹺板教程沒有按鍵示例 - 添加效果會很好。

如果要全局攔截swing應用程序中的鍵,則需要KeyEventDispatcher ,您將通過KeyboardFocusManager注冊。 如果你想根據特定組件的鍵添加操作(更高級別 - 更好),你可能需要KeyBindings http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

在你學習蹺蹺板之前,你想要了解一點擺動。 Java Trail是一個很好的起點。 http://docs.oracle.com/javase/tutorial/uiswing/index.html

你的電話中有一個電子警報,並不屬於那里。 應該沒有它。 祝你在不學習Java的情況下嘗試使用Clojure好運,我認為從長遠來看它不會有用,但如果確實如此,它會很好。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM