gpt4 book ai didi

java - 从 VBox 获取文本字段的值

转载 作者:行者123 更新时间:2023-12-01 11:05:29 25 4
gpt4 key购买 nike

我目前正在每次按下按钮时动态添加一个 TextField 和相应的 ComboBox 。有没有办法在我的方法之外使用 VBox (fieldContainer) 变量来获取 TextFieldComboBox 值?

编辑

我正在创建一个应用程序,用户可以在其中连接到数据库并创建表。用户创建表的场景有一个用于表名称的 TextField 和一个用于列名称的 TextField 以及相应的 ComboBox 来选择列类型。

create table scene

当用户单击添加字段时,它会在当前字段下方生成另一个 TextFieldComboBox,因此现在表格为两列,等等...

稍后我想在用户单击“创建”时获取值(使用下面的代码),以便我可以将其组织为正确的 SQL 语句。

代码

addTableField.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
HBox box = new HBox(10);

ComboBox<String> combo = new ComboBox<String>(fieldTypes);
combo.setPromptText("type");

TextField field = new TextField();
field.setPromptText("field label");

box.getChildren().addAll(field, combo);

fieldContainer.getChildren().addAll(box);
window.sizeToScene();
}
});

最佳答案

您可以通过创建一个类来保存数据(如果我理解正确的话)将形成结果表的每一行来做到这一点。创建 HBox 时,从此类创建一个对象,将对象中的数据绑定(bind)到控件中的数据,并将对象添加到列表中。然后您可以检查列表的内容。

类似于:

public class Row {
private final StringProperty label = new SimpleStringProperty() ;
public StringProperty labelProperty() {
return label ;
}
public final String getLabel() {
return labelProperty().get();
}
public final void setLabel(String label) {
labelProperty().set(label);
}

public final StringProperty type = new SimpleStringProperty();
public StringProperty typeProperty() {
return type ;
}
public final String getType() {
return typeProperty().get();
}
public final void setType(String type) {
typeProperty().set(type);
}
}

现在在您的主代码中执行以下操作:

final List<Row> rows = new ArrayList<>();

addTableField.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
HBox box = new HBox(10);

ComboBox<String> combo = new ComboBox<String>(fieldTypes);
combo.setPromptText("type");

TextField field = new TextField();
field.setPromptText("field label");

box.getChildren().addAll(field, combo);

fieldContainer.getChildren().addAll(box);

Row row = new Row();
rows.add(row);
row.labelProperty().bind(field.textProperty());
row.typeProperty().bind(combo.valueProperty()); // might need to worry about null values...

window.sizeToScene();
}
});

然后,当用户单击“创建”时,您可以使用 getLabel() 迭代 rows,其中为您创建的每个 HBox 提供一个对象getType() 给出相应 HBox 中相应控件中的值。

关于java - 从 VBox 获取文本字段的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33005349/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com