JavaFX禁用标签导航

时间:2017-03-13 13:15:33

标签: java javafx

我正在编写一个控制台应用程序,我想在按Tab键时自动完成命令。问题是,当您在javaFX中按Tab键时,它会将焦点切换到应用程序中的另一个元素。有什么方法可以禁用它吗?

1 个答案:

答案 0 :(得分:3)

添加事件过滤器并使用该事件:

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class DisableFocusNavigation extends Application {

    private TextField createTextField() {
        TextField textField = new TextField();
        textField.addEventFilter(KeyEvent.KEY_PRESSED, event -> {
            if (event.getCode() == KeyCode.TAB) {
                System.out.println("Tab pressed");
                event.consume();
            }
        });
        return textField ;
    }

    @Override
    public void start(Stage primaryStage) {
        TextField tf1 = createTextField();
        TextField tf2 = createTextField();

        VBox root = new VBox(5, tf1, tf2);
        root.setAlignment(Pos.CENTER);
        root.setPadding(new Insets(20));

        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }

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

请注意,这不是特别好的做法,因为它使得在没有鼠标(或类似的输入设备)的情况下无法使用该应用程序。您至少应检查事件过滤器中的修饰键,并允许一些焦点遍历选项。