簡體   English   中英

如何在 JavaFX 中添加快捷鍵?

[英]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();

    }
});

現在編譯器只是推斷該keyjavafx.scene.input.KeyEvent ,您甚至不需要導入。

暫無
暫無

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

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