2017-09-13 5 views
3

私のアプリケーションには約50のボタンがあります。ActionEventハンドラハンドルを持つすべてのボタンを作成する方法JavaFXにキーを入力しますか?

@FXML 
protected void handleFooButtonActionEvent(ActionEvent actionEvent) { 
    ... 
} 

この方法で、マウスの左ボタンまたはスペースキーを使用してボタンを押すことができます。しかし、私が知っているように、Enterキーを使ってユーザーがボタンを押すことができるようにするのが普通の方法です。例えば、Stage stage,Scene sceneまたはParent rootという参照がある場合、ActionEventハンドラ(上記参照)を持つすべてのボタンをEnterキーをJavaFXで処理することは可能ですか?

+0

ボタンが選択されているか、常時表示されていますか? – jrtapsell

+0

@jrtapsell私は、ボタンにフォーカスがあり、ユーザーがEnterキーを押したときを意味します。 –

+0

これはあなたがやりたいことと似ていますか? > https://stackoverflow.com/questions/25758782/fire-buttons-onaction-with-enter-in-javafx – jrtapsell

答えて

2

あなたはそれを行うにはシーンを設定することができます。

scene.getAccelerators().put(
    KeyCombination.valueOf("Enter"),() -> { 
     Node focusOwner = scene.getFocusOwner(); 
     if (focusOwner instanceof Button) { 
      ((Button) focusOwner).fire(); 
     } 
    }); 

ます。また、イベントハンドラでそれを行うことができます。

scene.addEventHandler(KeyEvent.KEY_PRESSED, e -> { 
    if (e.getCode() == KeyCode.ENTER) { 
     Node focusOwner = scene.getFocusOwner(); 
     if (focusOwner instanceof Button) { 
      ((Button) focusOwner).fire(); 
     } 
    } 
}); 

通常、私は、標準の動作を変更することをJames_Dに同意するだろうボタンは良いアイデアではありませんが、あなたが言及したように、すべてのGTKアプリケーションがEnterを押してボタンの押下を許可することを発見しました。

+0

私はあなたの2番目のソリューションを使いました。できます。私がボタン上のスペースを押すと、ボタンの色が変わる(押された)唯一の問題ですが、押しボタンを押すと色は変わりません。 Enterを押してボタンの色を反応させることは可能ですか? –

+0

これはJava 9で修正されたバグです。Java 9は今年の9月21日(今日から1週間)にリリースされます。 – VGR

関連する問題