更新 TextField 字段值时出现问题
Problem updating the TextField field value
我有 4 个文本字段,我已经将它们格式化为仅接收整数值。
我现在希望 "Capital" 字段在每次更新值时实时接收所有其他字段的总和;
我尝试了绑定,但我不太了解,我还尝试在底部字段上添加侦听器以更新 "capital" 的值,但它没有像我希望的那样做出反应
您可以使用 Bindings.createStringBinding 实现此目的,请记住在 dependencies
参数中包含所有 4 个文本字段
下一段代码展示了如何绑定三个 TextField:
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);
}
}
我有 4 个文本字段,我已经将它们格式化为仅接收整数值。
我现在希望 "Capital" 字段在每次更新值时实时接收所有其他字段的总和;
我尝试了绑定,但我不太了解,我还尝试在底部字段上添加侦听器以更新 "capital" 的值,但它没有像我希望的那样做出反应
您可以使用 Bindings.createStringBinding 实现此目的,请记住在 dependencies
参数中包含所有 4 个文本字段
下一段代码展示了如何绑定三个 TextField:
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);
}
}