有没有办法把焦点放在javafx上?

saz*_*y4o 6 java javafx focus nodes javafx-2

我知道你可以通过执行node.requestFocus()来关注javafx中的节点.但有没有办法从javafx中的节点中取走焦点或防止对焦于对象?

Jam*_*s_D 17

我认为没有任何保证这将始终有效,但您可以尝试将焦点设置为本身不接受键盘输入的内容(例如布局窗格):

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();
    }
}
Run Code Online (Sandbox Code Playgroud)


Phi*_*ghn 11

node = new node() {
  public void requestFocus() { }
};
Run Code Online (Sandbox Code Playgroud)

现在这将覆盖焦点,节点永远不会有焦点.您也可以(如前所述)禁用节点:

node.setDisable(true);
Run Code Online (Sandbox Code Playgroud)

如果您以后需要关注:

node.setDisable(false);
node.requestFocus();
Run Code Online (Sandbox Code Playgroud)

我决定用另外一个选项更新我对此的回答.如果您在程序开始时给予另一个节点焦点,则可以将特定节点设置为不可遍历,并且不会获得焦点.

node.setFocusTraversable(false);
Run Code Online (Sandbox Code Playgroud)

  • node.setFocusTraversible(真); 做魔术! (2认同)