Проблема с обновлением значения поля TextField - PullRequest
0 голосов
/ 14 ноября 2018

image

У меня есть 4 текстовых поля, которые я уже отформатировал, чтобы получать только целые значения.

Теперь я хочу, чтобы поле «Капитал» получало в реальном времени сумму всех остальных полей каждый раз, когда их значение обновляется;

Я пытался связать, но я тоже не знаюЯ также пытался добавить прослушиватель в нижние поля, чтобы обновить значение «прописной», но он не реагирует так, как мне хотелось бы

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Следующий блок кода показывает, как связать три TextFields:

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.StringBinding;
import javafx.scene.Scene;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Test extends Application {

    @Override
    public void start(final Stage primaryStage) {

        final VBox vBox = new VBox();

        final TextField textField1 = new TextField();
        final TextField textField2 = new TextField();
        final TextField textField3 = new TextField();
        final TextField textField4 = new TextField();

        final StringBinding createStringBinding = Bindings.createStringBinding(()-> {
            String valueTextField1 = (textField1.getText().isEmpty()) ? "0" : textField1.getText();
            String valueTextField2 = (textField2.getText().isEmpty()) ? "0" : textField2.getText();
            String valueTextField3 = (textField3.getText().isEmpty()) ? "0" : textField3.getText();
            return String.valueOf(Integer.valueOf(valueTextField1) + Integer.valueOf(valueTextField2) + Integer.valueOf(valueTextField3));}, textField1.textProperty(), textField2.textProperty(), textField3.textProperty());

        textField4.textProperty().bind(createStringBinding);

        vBox.getChildren().add(textField1);
        vBox.getChildren().add(textField2);
        vBox.getChildren().add(textField3);
        vBox.getChildren().add(textField4);

        final Scene scene = new Scene(vBox, 400, 200);
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    public static void main(final String[] args) {
        launch(args);
    }
}
0 голосов
/ 14 ноября 2018

Вы можете использовать Bindings.createStringBinding , чтобы добиться этого, не забудьте включить все 4 текстовых поля в параметр dependencies

...