@LorDDrouS
Учусь создавать android приложения

Как считать из TextField в javaFx?

Здравствуйте, начал разбираться в javafx, возникла проблема со считываеним информации из textfield и вывод в label, сам реализовал без controller.java и fxml, но хотелось бы с ними, хочу понять как работает контроллер и т.д., чтобы не писать все в main'e. Заранее спасибо
1) вот так работает, без контроллера и fxml, все вручную
@Override
    public void start(Stage stage) {
        Group root = new Group();
        Scene scene = new Scene(root, 300, 150);
        stage.setScene(scene);
        stage.setTitle("Text Field Sample");

        GridPane grid = new GridPane();
        grid.setPadding(new Insets(10, 10, 10, 10));
        grid.setVgap(5);
        grid.setHgap(5);

        scene.setRoot(grid);

        final TextField name = new TextField();
        name.setPromptText("Enter your first name.");
        name.setPrefColumnCount(10);
        name.getText();
        GridPane.setConstraints(name, 0, 0);
        grid.getChildren().add(name);

        final TextField lastName = new TextField();
        lastName.setPromptText("Enter your last name.");
        GridPane.setConstraints(lastName, 0, 1);
        grid.getChildren().add(lastName);

        final TextField comment = new TextField();
        comment.setPrefColumnCount(15);
        comment.setPromptText("Enter your comment.");
        GridPane.setConstraints(comment, 0, 2);
        grid.getChildren().add(comment);

        Button submit = new Button("Submit");
        GridPane.setConstraints(submit, 1, 0);
        grid.getChildren().add(submit);

        Button clear = new Button("Clear");
        GridPane.setConstraints(clear, 1, 1);
        grid.getChildren().add(clear);

        final Label label = new Label();
        GridPane.setConstraints(label, 0, 3);
        GridPane.setColumnSpan(label, 2);
        grid.getChildren().add(label);

        submit.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                if (
                    (comment.getText() != null && !comment.getText().isEmpty())
                ) {
                    label.setText(name.getText() + " " +
                        lastName.getText() + ", "
                        + "thank you for your comment!");
                } else {
                    label.setText("You have not left a comment.");
                }
            }
        });

        clear.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent e) {
                name.clear();
                lastName.clear();
                comment.clear();
                label.setText(null);
            }
        });

        stage.show();
    }

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

2) а когда делаю так, то не работает
<GridPane alignment="center" hgap="10" prefHeight="150.0" prefWidth="303.0" vgap="10" xmlns="http://javafx.com/javafx/8.0.112" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
   <columnConstraints>
      <ColumnConstraints />
   </columnConstraints>
   <rowConstraints>
      <RowConstraints />
      <RowConstraints />
      <RowConstraints />
      <RowConstraints />
   </rowConstraints>
   <TextField id="tittel" fx:id="tittel" layoutX="120.0" layoutY="64.0" onAction="#handleButton1Action" promptText="Tittel" GridPane.rowIndex="1" />
   <Button id="button" fx:id="button1" layoutX="100.0" layoutY="50.0" onAction="#handleButton1Action" prefHeight="25.0" prefWidth="70.0" text="Click me" GridPane.rowIndex="3" />
</GridPane>

a9a94bbb39a64e3995a3e8ab27465788.png
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception{
        Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
        primaryStage.setTitle("Hello World");
        Scene scene = new Scene(root, 300, 275, Color.RED);
        primaryStage.setScene(scene);
        primaryStage.show();
    }


    public static void main(String[] args) {
        launch(args);
    }
}
  • Вопрос задан
  • 2873 просмотра
Пригласить эксперта
Ответы на вопрос 1
Rou1997
@Rou1997
Потому что у вас заново создается JTextField, взамен "подхваченного" из FXML:
textField = new TextField();
Уберите это.
Кроме того, в FXML же у вас id=tittel, значит и имя поля должно быть tittel, а не textField, иначе не "подхватится".

Учусь создавать android приложения

Это вы на JavaFX собрались писать для Android? Серьезно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы