有没有办法在javafx中消除注意力?

2022-09-03 17:03:56

我知道你可以通过做node.requestFocus()来将焦点放在javafx中的节点上;但是有没有办法从javafx中的节点上移开焦点或阻止对对象的关注?


答案 1

我不认为这可以保证这总是有效的,但你可以尝试将焦点设置为本质上不接受键盘输入的东西(例如布局窗格):

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class NoFocusTest extends Application {

    @Override
    public void start(Stage primaryStage) {
        TextField tf1 = new TextField();
        tf1.setPromptText("Enter something");
        TextField tf2 = new TextField();
        tf2.setPromptText("Enter something else");
        VBox root = new VBox(5, tf1, tf2);
        primaryStage.setScene(new Scene(root, 250, 150));
        primaryStage.show();
        root.requestFocus();
    }
}

答案 2
node = new node() {
  public void requestFocus() { }
};

现在,这将覆盖焦点,节点将永远无法获得焦点。您还可以(如前所述)通过以下方式禁用节点:

node.setDisable(true);

如果您以后需要集中注意力:

node.setDisable(false);
node.requestFocus();

我决定用另一个选项更新我的答案。如果您在程序开始时提供另一个节点焦点,则可以将特定节点设置为不可遍历,并且它不会获得焦点。

node.setFocusTraversable(false);