【问题标题】:Creating a dynamic node list, how do I access them later?创建动态节点列表,以后如何访问它们?
【发布时间】:2018-08-30 19:02:37
【问题描述】:

这是我的代码:

for (int i=1; i<= columnCount; i++) {
    HBox h = new HBox();
    Label column = new Label(rsmd.getColumnName(i));
    TextField entry = new TextField();
    h.getChildren().addAll(column, entry);
    dialogVbox.getChildren().add(h);
}

我需要在 for 循环中运行它,因为创建的行数取决于从数据库表中检索到的列。在此之后,当用户单击按钮时,我需要检索他们在“条目”文本字段中输入的新值。有没有办法做到这一点?我假设我可能必须在循环之外创建一些动态列表并填充它,但我不知道该怎么做。任何帮助将不胜感激!

【问题讨论】:

  • 如果不先访问子节点,就不能在节点上调用 add()。这就是为什么不
  • @markspace 它是 JavaFX,而不是 Swing
  • 好吧,粗鲁,没有仔细阅读标签。对不起那些人。 @BlakeOrdway
  • 查看我对这个问题的回答:stackoverflow.com/questions/52047923/…。这可能会引导你走向正确的方向。

标签: java list loops object javafx


【解决方案1】:

为什么不使用直接填充在相应TextFields 的编辑操作上的地图:

Map<String, String> newValues = new HashMap<>();

for (int i=1; i<= columnCount; i++) {
    final String columnName = rsmd.getColumnName(i); 
    HBox h = new HBox();
    Label column = new Label(columnName);
    TextField entry = new TextField();
    entry.textProperty().addListener((e,o,n) -> newValues.put(columnName, n));
    h.getChildren().addAll(column, entry);
    dialogVbox.getChildren().add(h);
}

然后插入数据库

String columns = newValues.entrySet().stream().map( n -> n.getKey() ).collect( Collectors.joining( "," ) );
String values = newValues.entrySet().stream().map( n -> n.getValue() ).collect( Collectors.joining( "," ) );

String sql = "insert into table ( " + columns + ") values (" + values + ")";
// run sql

【讨论】:

  • 好吧,这是有道理的,在每个 TextField 上都有一个侦听器来响应新值并更新列表是有道理的。我不知道可以在循环中创建一个侦听器,但我想你没有理由不能......谢谢!
猜你喜欢
  • 2019-07-20
  • 1970-01-01
  • 2011-04-06
  • 2018-04-22
  • 2017-04-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2023-03-18
相关资源
最近更新 更多