[英]How to add a key shortcut in JavaFX?
新用戶:從一月份開始學習 Java,我現在正在使用 NetBeans,如果我寫這個簡單的快捷方式,我會遇到很多錯誤。
Scene root = new Scene(layout ,Screen.getPrimary().getBounds().getWidth()/2, Screen.getPrimary().getBounds().getHeight()/2);
root.setOnKeyPressed(new EventHandler<KeyEvent>() {
public void handle(KeyEvent key) {
if (key.getCode() == KeyCode.P && key.isControlDown()) {
primaryStage.close();
}
}
});
所以 IDE 只是告訴我我做錯了幾乎所有事情。 在與 setOnKeyPressed 一致的情況下,我得到
“類型參數 KeyEvent 不在類型變量 T 的范圍內,其中 T 是類型變量:T 擴展接口 EventHandler 中聲明的事件”
老實說,我不知道T是什么。
后來,在 getCode() 上,我收到錯誤“找不到符號” 。
我導入了所有內容並從stackoverflow.com 上的另一個(可能有效)問題中復制了這段代碼.
谷歌搜索這對我來說非常令人沮喪,我總是在這個站點上使用不起作用的解決方案或創建“偵聽器”或“組合鍵”或“助記符”的其他站點。 我不需要使用它們來了解事件是如何用這種語言處理的,我知道這是可能的,但我找不到解決方案(即使是 Oracle,什么也沒有)。 解決方案可能很簡單,但我正在瘋狂尋找它
T
指的是事件處理程序處理的事件類型:請參閱文檔:
接口
EventHandler<T extends Event>
類型參數:
T
- 此處理程序可以處理的事件 class
由於EventHandler
使用類型T extends Event
聲明,並且setOnKeyPressed()
方法需要EventHandler<? super KeyEvent>
EventHandler<? super KeyEvent>
,您必須提供一個EventHandler<T>
,其中T
是某種類型,它既是Event
的子類(包括Event
本身)又是KeyEvent
的超類(包括KeyEvent
本身)。
由於javafx.scene.input.KeyEvent
滿足這些約束,並且由於javafx.sene.input.KeyEvent
肯定有一個 getCode getCode()
方法,唯一的結論是您提供的KeyEvent
類型不是javafx.scene.input.KeyEvent
。
換句話說,您對KeyEvent
的導入錯誤。
當然,您可以只使用 Java 8+ 編譯時類型推斷,然后使所有這些 go 消失,例如使用 lambda 表達式:
root.setOnKeyPressed( key -> {
if (key.getCode() == KeyCode.P && key.isControlDown()) {
primaryStage.close();
}
});
現在編譯器只是推斷該key
是javafx.scene.input.KeyEvent
,您甚至不需要導入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.