The JavaFX API does not provide a way to get the state of CAPS LOCK or NUM LOCK 
on the keyboard. Being able to read the lock state would allow an application 
to inform the user that caps lock was enabled for passwords or other usages 
where the keyboard input might not be echoed. It would also allow an 
application to do spell checking / auto-correction that might ordinarily be 
skipped when typing all upper-case letters.

We need an equivalent JavaFX API to the existing AWT 
`java.awt.ToolKit::getLockingKeyState` method. A natural place to put this in 
JavaFX is in the `javafx.application.Platform` class, so we propose to create a 
new `Platform::isKeyLocked` method, which will take a `KeyCode` -- either 
`CAPS` or `NUM_LOCK` -- and return an `Optional<Boolean>` indicating whether or 
not that key is in the locked or "on" state. If we can't read the key state on 
a particular platform, we will return `Optional.empty()`, rather than throwing 
a runtime exception as AWT does.

I have provided both an automated Robot test and a manual test. The latter is 
needed primarily because we can't set the CAPS lock on Mac using Robot, but 
also because we want  way to test the case where the user has enabled CAPS lock 
before the program starts.

-------------

Commit messages:
 - 8259680: Need API to query states of CAPS LOCK and NUM LOCK keys

Changes: https://git.openjdk.java.net/jfx/pull/385/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jfx&pr=385&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8259680
  Stats: 419 lines in 15 files changed: 418 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jfx/pull/385.diff
  Fetch: git fetch https://git.openjdk.java.net/jfx pull/385/head:pull/385

PR: https://git.openjdk.java.net/jfx/pull/385

Reply via email to