我正在做一个项目,其中包括添加客户信息。
我有四个TextFields,我希望使用它从用户那里获取客户信息。
我希望禁用每个TextField,直到用户提交之前所需的字段。我该怎么做?
我试图对其中一个文本字段执行此操作,但它没有工作,而且没有完成:
TextField idTF = new TextField();
TextField nameTF = new TextField();
if (idTF.getText().isEmpty())
nameTF.disableProperty();
TextField addressTF = new TextField();
TextField mobileTF = new TextField();
发布于 2022-01-09 19:20:57
正如@MadProgrammer所提到的,您可以将侦听器添加到每个textField的TextField中,并关闭/打开另一个textField的禁用属性,或者可以在依赖字段之间创建一个BooleanBinding。
可以如下所示创建BooleanBinding:
textField2.disableProperty().bind(
Bindings.createBooleanBinding(() -> textField1.isDisable() || textField1.getText() == null || textField1.getText().isEmpty(),
textField1.textProperty(), textField1.disableProperty()));
下面是完整的工作示例。
import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.geometry.Insets;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class TextFieldDemo extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
StackPane root = new StackPane();
root.setPadding(new Insets(10));
Scene scene = new Scene(root, 320, 300);
primaryStage.setScene(scene);
primaryStage.setTitle("TextField Demo");
primaryStage.show();
TextField tf1 = new TextField();
TextField tf2 = new TextField();
TextField tf3 = new TextField();
TextField tf4 = new TextField();
Button submitBtn = new Button("Submit");
addBinding(submitBtn, tf1, tf2, tf3, tf4);
VBox pane = new VBox(tf1, tf2, tf3, tf4, submitBtn);
pane.setSpacing(10);
root.getChildren().add(pane);
}
private void addBinding(Button submitBtn, TextField... textFields) {
for (int i = 0; i < textFields.length; i++) {
TextField tf = textFields[i];
Node node = i == textFields.length - 1 ? submitBtn : textFields[i + 1];
node.disableProperty().bind(
Bindings.createBooleanBinding(() -> tf.isDisable() || tf.getText() == null || tf.getText().isEmpty(),
tf.textProperty(), tf.disableProperty()));
}
}
}
https://stackoverflow.com/questions/70645690
复制