2016-03-22 15 views
2

私はservarelチェックでinputformを作成しようとしています。 CapsLockがアクティブかどうかをチェックすることです... Java Swingでこの機能を構築しようとすると動作します。下のコードを参照してください...しかし、JavaFXでは全く動作しません。私はチェックする度に同じ状態になる... JavaFXでは、私のアプリケーションのように、最初の状態を尋ねて、それを保存し、さらにそれを保存し、それをさらに提示するようだ...JavaFXでCapsLock状態を取得する

JavaSwing細かい)

frame.addKeyListener(new KeyListener() { 
     public void keyTyped(KeyEvent e) { 
      if(e.getKeyCode() == KeyEvent.VK_CAPS_LOCK){ 
       System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); 
      } else if(e.isShiftDown()){ 
       System.out.println("SHIFT"); 
      } 
     } 

     public void keyPressed(KeyEvent e) { 
      if(e.getKeyCode() == KeyEvent.VK_CAPS_LOCK){ 
       System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); 
      } else if(e.isShiftDown()){ 
       System.out.println("SHIFT"); 
      } 
     } 

     public void keyReleased(KeyEvent e) { 
      if(e.getKeyCode() == KeyEvent.VK_CAPS_LOCK){ 
       System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); 
      } else if(e.isShiftDown()){ 
       System.out.println("SHIFT"); 
      } 
     } 
    }); 

のJavaFX(常に同じ状態を提示)

  scene.setOnKeyReleased(new EventHandler<javafx.scene.input.KeyEvent>() { 
      @Override 
      public void handle(javafx.scene.input.KeyEvent event) { 
       if(event.getCode() == KeyCode.CAPS){ 
        System.out.println("CAPS"); 
        System.out.println(Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); 
       } 
      } 
     }); 

は、誰もがなぜ知っていますか?私に何ができる?事前

+0

[可能な重複](http://stackoverflow.com/questions/26529180/how-can-i-get-the-keyboard-caps-lock-state-in-javafx) – MadProgrammer

+0

この質問はまた、なぜそれが含まれSwingでは動作しますが、JavaFXでは動作しません – user2734182

+1

不可能、これに関するバグがあります。https://bugs.openjdk.java.net/browse/JDK-8090882 – TiMr

答えて

1

編集中

ありがとう:問題は、Windows関連する1つであるように思えます。 This question has an answer that might work for you

押すとキャップが繰り返しロックしたときにこれは、次のコンソール出力で私の作品:

CAPSLOCKは

CAPSLOCK状態を押す:真

CAPSLOCKは

CAPSLOCK状態を押す:偽

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.input.KeyCode; 
import javafx.scene.layout.Pane; 
import javafx.stage.Stage; 

import java.awt.*; 
import java.awt.event.KeyEvent; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     Pane root = new Pane(); 
     Scene scene = new Scene(root, 500, 500); 

     primaryStage.setScene(scene); 
     primaryStage.show(); 

     //scene.setOnKeyPressed(event -> { 
     scene.setOnKeyReleased(event -> { 
      if (event.getCode() == KeyCode.CAPS) { 
       System.out.println("Capslock pressed"); 
       System.out.println("Capslock state: " + Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK)); 
      } 
     }); 

    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 

問題の原因がわかりません。

+0

非常に面白いです。どのJavaバージョンを使用していますか? OpenJDKを使用していますか?あなたのコードをテストし、あなたが宣言したとおりに動作しません:( – user2734182

+0

私はjdk 1.8.0_66を使用していますが、またあなたの質問から_72 – JohnRW

+0

で試しましたopenjdkを使用していたことがわかりませんでした – JohnRW

関連する問題