【问题标题】:JavaFX architecture in building dynamic "rows"构建动态“行”的 JavaFX 架构
【发布时间】:2013-11-26 01:41:21
【问题描述】:

我有一个正在构建的应用程序,其中包含一个表格,我没有使用 tableview 来构建这个表格,因为我需要每一行都能够像手风琴一样扩展。我能够通过使用时间线并循环遍历数据并构建每一行来实现我所需要的(它现在有点粗糙,因为我仍在使用虚拟数据,最终它将是一个列表迭代器,而不仅仅是一个 for 循环) 但我对它的完成方式不满意。有很多默认值永远不会改变,所以我真的不需要每次都在我的工人类中设置它们,我决定将它们添加到我放在一起的对象类中。所以基本上,在高层次上它看起来像这样:

for (int i = 0; i < 30; i++) {
    RowBuilder builder = new RowBuilder(tableBox, i);
    try {
    builder.run();
} catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

}

我将其作为 VBox - tableBox 的父级传递给它,然后我将传递计数以供以后使用。

在 RowBuilder 中,我得到了对象 DashboardRow 的新实例,其中设置了所有默认值,然后我为每一行设置数据并返回 DashboardRow。

这是 DashboardRow 中 getter 设置值的示例

public HBox getMainRow() {
    mainRow.setAlignment(Pos.CENTER_LEFT);
    mainRow.setPrefHeight(60);
    mainRow.setMinHeight(60);
    mainRow.setMaxHeight(60);
    mainRow.setPrefWidth(-1);
    mainRow.setStyle("-fx-background-color:#FFFFFF;");
    return mainRow;
}

在 DashboardRow 类中,我为行中需要的每个元素创建了大量新对象。每行有 21 个,主要是 VBox、HBox 和 StackPane 来构建实际的行,其余的只是标签和按钮。

这是目前的样子。打开和关闭状态。


有没有更好的方法在 javafx 中动态构建这样的东西?我基本上是从数据库中提取数据并循环遍历该数据以填充一行。

【问题讨论】:

    标签: javafx


    【解决方案1】:

    我无法发表评论,但无论如何这可能是一个答案。为什么不能使用自定义表格单元格的 setGraphic 方法并将手风琴节点放在表格中。 setGraphic 接受任何类型的节点。

    听起来比你做的简单。

    我刚刚用Oracle sample 试了一下,效果很好。 我加了

        Callback<TableColumn<Person, String>, TableCell<Person, String>> accCellFactory
                = new Callback<TableColumn<Person, String>, TableCell<Person, String>>() {
                    @Override
                    public TableCell call(TableColumn p) {
                        TitledPane t1 = new TitledPane("T1", new Button("B1"));
                        TitledPane t2 = new TitledPane("T2", new Button("B2"));
                        TitledPane t3 = new TitledPane("T3", new Button("B3"));
                        Accordion accordion = new Accordion();
                        accordion.getPanes().addAll(t1, t2, t3);
                        TableCell tc = new TableCell();
                        tc.setGraphic(accordion);
                        return tc;
                    }
                };
    

    并更改了这一行firstNameCol.setCellFactory(accCellFactory);

    我明白了

    当然,您可能想要按钮以外的东西,但我只是从 javadoc 中复制了 Accordion 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-18
      • 2018-03-16
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2019-06-01
      相关资源
      最近更新 更多