1

私の例では、矢印キーがコントロールをナビゲートするのを止めようとしています。これを行う方法がわかりません。ここに私が作成した例があります:

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.FlowPane;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;

public class KeyEventTest extends Application{

    private EventHandler<KeyEvent> keyEventHandler;

    @Override
    public void start(Stage stage) throws Exception {
        // TODO Auto-generated method stub
        Group root = new Group();
        FlowPane f = new FlowPane();
        Button r = new Button("button1");
        Button r2 = new Button("button1");
        Button r3 = new Button("button1");
        f.getChildren().addAll(r,r2,r3);
        root.getChildren().add(f);
        Scene scene = new Scene(root,600,600);
        keyEventHandler = new EventHandler<KeyEvent>() {
            public void handle(final KeyEvent keyEvent) {
                if (keyEvent.getCode() == KeyCode.LEFT || keyEvent.getCode() == KeyCode.UP) {
                    System.out.println("arrow keys");
                }else{
                    System.out.println(keyEvent);
                }
            }
        };
        stage.addEventHandler(KeyEvent.KEY_PRESSED, keyEventHandler);


        stage.setScene(scene);
        stage.show();
    }

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

}

どんな助けでも感謝しますありがとう

4

2 に答える 2

-1

まず、この質問に対する回答は、次の質問に対する回答と似ています: JavaFX: フォーカス トラバーサル ポリシーを変更するには?

状況によっては、トラバースが行われないようにトラバーサル ポリシーを変更できます。

もう 1 つの決定は、フォーカスされたプロパティのリスナーを追加し、望まない場合はフォーカスを戻すことです (ただし、すべてのナビゲーション キーで機能します)。

node.focusedProperty().addListener(new ChangeListener<Boolean>(){
            public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
                Platform.runLater(new Runnable(){
                    public void run() {
                        node.requestFocus();
                    }
                });                    
            }
        });

このような問題のため、runLater を使用する必要があります: JavaFx: ダイアログの後、2 つのテキストフィールドが 1 つではなくフォーカスを取得

これを行う方法-キーを押したときのハンドラーは、キーを離したときにもアクションが発生する可能性があるため、常に機能するとは限りません。

通常、キーを押したときの動作は、スキン クラスからアクセスできる動作クラスで決定されます。キーを押したときの動作を変更したい場合は、動作クラスを変更できます。

于 2013-03-11T13:13:11.220 に答える