2014-08-31 90 views
1

一個JavaFX 8控制器怎樣才能知道是否按CtrlAlt鍵輸入鍵位於鍵盤的左側或右側部分?如何區分JavaFX中的左/右移,ctrl,alt和輸入鍵?

不幸的是中的getKeyLocation()方法不存在javafx.scene.input.KeyEvent類。

我也試圖通過截取window.onkeydown檢查在JavaScript中event.location,但不像V8或其它JS引擎,看來犀牛庫不歧視他們,並返回DOM_KEY_LOCATION_STANDARD無論身在何處的關鍵所在。

由於整體密鑰捕獲似乎非常破碎(KeyEvent::getCode/keyText方法中的不一致),我開始認爲需要外部庫。 JavaFX(或Java)庫中是否有解決方案,如果不是,可以在不同平臺(Windows,Linux和Mac OS)上提供相同功能的輕量級庫?

在此先感謝!

更新

使用JavaFX + AWT組件(見suggestion below)試過了,但因爲它似乎JavaFX提供和轉換的事件是行不通的 - 不正確。

JNativeHook(他們recently moved),它幾乎資格作爲變通,但無法識別某些鍵試過,具有計時不精確的,是一個有點尷尬實現,尤其是因爲我不能編譯本機代碼爲所有的平臺。許可條款也有點混亂(GPL爲穩定版本,這對我來說不是一種選擇,可能轉向LGPL ...)。

回答

1

我建議只使用java.awt,因爲它可以完美地滿足您的需求。它非常輕量級,更重要的是它提供了對Windows,Linux和Mac OS的支持。你可以找到一個簡單的例子here

我認爲這將是最有幫助的事情是事實,但它提供正確區分和左KEY_LOCATION_RIGHTKEY_LOCATION_LEFT如在文檔中提到的發現here

例如:getKeyCode可能返回VK_SHIFT然後getKeyLocation可能會返回KEY_LOCATION_RIGHT這顯然表明按下右移鍵可以執行任何您需要的操作。

祝你好運!

+0

這是一個想法提交功能請求,但在JavaFX的行爲不支持getKeyLocation,返回值始終是'KEY_LOCATION_UNKNOWN'。他們在Java 8方面確實做得很好;)另外,我並不熱衷於將JavaFX與Awt混合使用 - 如果它能夠工作,那麼它就可以作爲解決方法,但顯然並非如此。 – RedGlyph 2014-09-01 08:19:13

2

據我所知,目前沒有用於確定在JavaFX中按下哪個物理鍵的API。很難看到第三方庫如何實現這一點,因爲它必須以這種代碼無法訪問的方式攔截JavaFX的低級實現。

如果這對你很重要,我建議在https://javafx-jira.kenai.com/

+2

同時我找到了JNativeHook,而且我非常渴望嘗試一下。感謝您的鏈接,我可能會報告關鍵事件系統的不穩定和不完整的行爲。 – RedGlyph 2014-09-01 08:22:43

+0

請做一個錯誤報告。 JavaFX團隊在錯誤報告和功能請求方面做出了很好的迴應。 – 2014-09-01 12:56:16

+0

我做到了。也注意到他們沒有在事件上實現任何時間戳(getWhen),這對於該框架來說幾乎是不可行的。恐怕我不得不切換到.NET,並等到JavaFX成熟後(也希望是Java 8),直到想到多平臺支持爲止:( – RedGlyph 2014-09-01 13:54:01

相關問題