Skip to Main Content

Java SE (Java Platform, Standard Edition)

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

TextField.requestFocus()

joe42Sep 15 2012 — edited Sep 17 2012
Hi,

i have two tabs, both have a textfield as content. For both tabs i registered an EventHandler for selection changes. The EventHandler calls TextField.requestFocus(), but the textfield did not get the focus.
How can i tell JavaFX to set the focus to a textField when the new tab gets visible?

package textfield.focus;

import javafx.application.Application;
import javafx.event.Event;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class TextfieldFocus extends Application {

    @Override
    public void start(Stage primaryStage) {
        TabPane tabPane = new TabPane();
        final Tab firstTab = new Tab("1");
        final TextField firstTextField = new TextField("42");
        firstTab.setContent(firstTextField);

        firstTab.setOnSelectionChanged(new EventHandler<Event>() {
            @Override
            public void handle(final Event t) {
                if (firstTab.isSelected()) {
                    firstTextField.requestFocus();
                }
            }
        });

        final Tab secondTab = new Tab("2");
        final TextField secondTextField = new TextField("26");
        secondTab.setContent(secondTextField);
        secondTab.setOnSelectionChanged(new EventHandler<Event>() {
            @Override
            public void handle(final Event t) {
                if (secondTab.isSelected()) {
                    secondTextField.requestFocus();
                }
            }
        });

        tabPane.getTabs().add(firstTab);
        tabPane.getTabs().add(secondTab);

        StackPane root = new StackPane();
        root.getChildren().add(tabPane);
        Scene scene = new Scene(root, 300, 250);
        primaryStage.setTitle("TextField.requestFocus");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Oct 15 2012
Added on Sep 15 2012
9 comments
4,114 views