Java FX обновляет один TextField на основе другого значения TextField - PullRequest
0 голосов
/ 15 марта 2019

Я новичок в JAVA FX, я хочу «вживую» обновить один TextField на основе другого значения TextField.

Это мой фрагмент кода:

@FXML
private void initialize() {
tf_code.textProperty().addListener((observable, oldValue, newValue) -> {
        System.out.println(newValue.substring(2, 6));
        tf_newCode.setText(newValue.substring(2, 6));
    });

  }

Должен ли я добавить еще одинсписок на моем втором TextField?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Ваши вопросы на самом деле не объясняют проблему, с которой вы сталкиваетесь, хотя я вижу несколько, которые у вас должны быть .

Прежде всего, вам нужен только один слушатель длясначала TextField, потому что именно это мы наблюдаем за изменениями.

Затем вам необходимо учитывать ввод в TextField, который меньше 2 символов и больше 6. Так как вы установили жесткие ограниченияв вашем subString(2, 6) вызове мы хотим, чтобы наш слушатель работал только с этими ограничениями.

Вот простое текстовое приложение, которое демонстрирует:

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

public class TextFieldBinding extends Application {

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

    @Override
    public void start(Stage primaryStage) {

        // Simple interface
        VBox root = new VBox(5);
        root.setPadding(new Insets(10));
        root.setAlignment(Pos.CENTER);

        TextField txt1 = new TextField();
        TextField txt2 = new TextField();

        txt1.textProperty().addListener((observable, oldValue, newValue) -> {

            // First, only update txt2 if the new value entered in txt1 is greater than 2, otherwise
            // our substring() method will throw an exception
            if (newValue.length() > 2) {

                // We also need to prevent trying to get a substring that exceeds the remaining length
                // of the txt1 input
                int maxIndex;
                if (newValue.length() < 6) {
                    maxIndex = newValue.length();
                } else {
                    maxIndex = 6;
                }

                // Now set the text for txt2
                txt2.setText(newValue.substring(2, maxIndex));
            }
        });

        root.getChildren().addAll(txt1, txt2);

        // Show the Stage
        primaryStage.setWidth(300);
        primaryStage.setHeight(300);
        primaryStage.setScene(new Scene(root));
        primaryStage.show();
    }
}
0 голосов
/ 15 марта 2019

У меня работает.Обратите внимание, что приведенный ниже код не требует файла .fxml.Возможно, вызов метода substring() в коде, который вы разместили, выдает Exception, о котором вы не знаете, потому что перехватываете его в пустом блоке catch?Конечно, я только догадываюсь, так как вы разместили только часть своего кода.

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

public class JfxTst00 extends Application {
    public void start(Stage mainStage) throws Exception {
        mainStage.setTitle("JfxTst00");
        BorderPane root = new BorderPane();
        TextField tf_NewCode = new TextField();
        TextField tf_Code = new TextField();
        tf_Code.textProperty().addListener((observable, oldVal, newVal) -> tf_NewCode.setText(newVal));
        root.setTop(tf_Code);
        root.setBottom(tf_NewCode);
        Scene scene = new Scene(root, 220, 70);
        mainStage.setScene(scene);
        mainStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...