Is there a way to take away focus in javafx?

前端 未结 3 1697
迷失自我
迷失自我 2021-01-04 13:20

I know that your can give focus to a node in javafx by doing node.requestFocus(); but is there a way to take away focus from a node in javafx or prevent focus on an

相关标签:
3条回答
  • 2021-01-04 13:38

    If you have another node then you can remove focus from your node and give it to another with this.

    otherNode.requestFocus();
    

    By doing this you won't need to disable or enable your original node.

    Some nodes such as a Label won't look different when they have focus, so this can make it appear as if focus was removed.

    0 讨论(0)
  • 2021-01-04 13:52
    node = new node() {
      public void requestFocus() { }
    };
    

    Now this will override the focus and the node will NEVER be able to have focus. You could also (as stated before) disable the node with:

    node.setDisable(true);
    

    If you need focus later:

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

    I decided to update my answer to this with one more option. If you are giving another node focus at the start of the program you could set a particular node to be non-traversable and it will not gain focus.

    node.setFocusTraversable(false);
    
    0 讨论(0)
  • 2021-01-04 13:55

    I don't think there's any guarantee this will always work, but you can try setting focus to something that inherently doesn't accept keyboard input (such as a layout pane):

    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();
        }
    }
    
    0 讨论(0)
提交回复
热议问题