当前位置: 首页 > 知识库问答 >
问题:

如何在嵌套对象的TableView中显示数据?[副本]

鲁明知
2023-03-14
public class MarriageTableView extends AbstractTableViewController
{

    @FXML
    private TableView<Marriage> tableView;

    @FXML
    private TableColumn<Groom, String> groomFirstNameColumn;

    @FXML
    private TableColumn<Groom, String> groomLastNameColumn;

    @FXML
    private TableColumn<Bride, String> brideFirstNameColumn;

    @FXML
    private TableColumn<Bride, String> brideLastNameColumn;

    @FXML
    private TableColumn<Marriage, LocalDate> marriageDateColumn;
    
    @FXML
    void initialize()
    {
        this.groomFirstNameColumn.setCellValueFactory(new PropertyValueFactory<Groom, String>("firstName")); // <- Exception here
        this.groomLastNameColumn.setCellValueFactory(new PropertyValueFactory<Groom, String>("lastName"));
        this.brideFirstNameColumn.setCellValueFactory(new PropertyValueFactory<Bride, String>("firstName"));
        this.brideLastNameColumn.setCellValueFactory(new PropertyValueFactory<Bride, String>("lastName"));
        this.marriageDateColumn.setCellValueFactory(new PropertyValueFactory<Marriage, LocalDate>("marriageDate"));
    }
public class Marriage
{
    private Groom groom;
    private Bride bride;
    private LocalDate marriageDate;
}

public class Groom:
{
    private String firstName;
    private String lastName;
}

public class Bride:
{
    private String firstName;
    private String lastName;
}
java.lang.IllegalStateException: Cannot read from unreadable property firstName

共有1个答案

高嘉熙
2023-03-14

一种选择是使用自定义单元格实现,该实现知道如何显示所需的groombride数据。例如:

TableColumn<Marriage, Groom> groomCol = ...;
groomCol.setCellValueFactory(new PropertyValueFactory<>("groom"));
groomCol.setCellFactory(tc -> new TableCell<>() {

  @Override
  protected void updateItem(Groom item, boolean empty) {
    super.updateItem(item, empty); // must be called
    if (empty || item == null) {
      setText(null);
    } else {
      // replace with desired format
      setText(item.getFirstName() + " " + item.getLastName());
    }
  }
});

请注意,tableColumn的第一个类型参数必须与tableView的类型参数匹配(在本例中是marriage)。

顺便说一句,您真的需要新郎bride类吗?它们似乎具有相同的信息,并且可能组合成一个Person类。

// model class
public class Marriage {
  private final ObjectProperty<Groom> groom = new SimpleObjectProperty<>(this, "groom");
  public final void setGroom(Groom groom) { this.groom.set(groom); }
  public final Groom getGroom() { return groom.get(); }
  public final ObjectProperty<Groom> groomProperty() { return groom; }

  // other properties...
}
// table column configuration
TableColumn<Marriage, Groom> groomCol = ...;
groomCol.setCellValueFactory(data -> data.getValue().groomProperty());
groomCol.setCellFactory( ... );
 类似资料:
  • 我将spring boot与thymeleaf结合使用,在页面中尝试显示表单及其嵌套对象。 我的对象工厂有 id 当我显示时 我的工厂有很多机器,但没有一台展出 任何想法?

  • 我使用的是sequelize ORM,而对于DB我使用的是MySQL,在其中我关联了两个表并获得了数据,但我希望第二个数据(另一个表的数据)不应该像嵌套对象一样进来,而是我们可以在一个对象中显示所有数据(两个表的数据)。 让我展示一下屏幕快照。 我想要的东西。 忽略数据的键和值,但我的问题是,我们是否可以在同一对象中显示另一个表的数据(像inner join一样),而不是像嵌套对象中的数据。 任何

  • 我正在尝试在嵌套查询的命中时返回突出显示。根据文档,这是可能的。文档说: 父/子和嵌套特性允许返回在不同范围内匹配的文档。在嵌套的情况下,基于嵌套内部对象中的匹配返回文档。内部命中功能在搜索响应中为每个搜索命中返回导致搜索命中在不同范围内匹配的附加嵌套命中。通过在嵌套、has_child或has_parent查询和筛选器上定义inner_hits定义,可以使用内部命中。Inner hits还支持以

  • 问题内容: 使用AJAX发出POST请求后,我得到以下JSON响应: 我正在使用数据表来显示数据..但是使用此嵌套的JSON,我无法直接获取数据。我正在使用此https://datatables.net/examples/server_side/post.html https://datatables.net/reference/option/ajax.dataSrc作为参考。 问题答案: 您必须

  • 问题内容: 这是我的模型: User.java 我想建立一个这样的用户朋友表: users.jsf 由于用户很多,因此无法一次性转储用户表。 在这种情况下,数据表组件是理想的,因为它具有内置的分页支持。也是理想的,因为可以对列进行排序… 不幸的是,我无法通过Primefaces示例找到改变用户列行距的方法。 如何建立该数据表? 问题答案: 基于@Kerem的答案,这是我想出的解决方案: 为了使嵌套