将ObservableList插入TableView JavaFX

时间:2017-11-07 09:01:27

标签: java javafx tablecolumn

我想将所有囚犯数据显示在一个TableView中。 囚犯看起来像那样(所有代码都是样本):

public class Prisoner {
    private String id;
    private String name;
    private PrisonerCase case;
    Prisoner() {
        id = "Unknown";
        name = "Unknown";
        case = new PrisonerCase();
    }
}

public class PrisonerCase {
    private String id_case;
    private String date_case;
    PrisonerCase() {
        id_case = "unknown";
        date_case = "unknown";
    }
}

然后我有我的TableView: 数据是ObservableList<Prisoner>并返回我在数据库中的所有囚犯。我在函数getData()中建立了所有囚犯和所有囚犯案件。

TableView tv = new TableView();
data = Database.getData();
TableColumn id_column = new TableColumn("ID");
id_column.setCellValueFactory(new PropertyValueFactory<Prisoner, String>("id"));

这很好用,但我的问题是,如何在TableView中添加案例? 我试过了

TableColumn n_case_column = new TableColumn("N° Case");
n_case_colmun.setCellValueFactory(new PropertyValueFactory<PrisonerCase, String>("id_case"));

但它不起作用。 当然,我没有忘记在最后将所有列添加到TableView。

tv.setItems(data);
tv.getColmuns().addAll(id_column, n_case_column);

2 个答案:

答案 0 :(得分:1)

首先,从不使用原始类型。 TableView的类型是表示每行的对象的类型(在这种情况下为Prisoner)。 TableColumn的类型首先是TableView的类型,其次是该列中每个单元格中显示的数据类型。

所以你应该

TableView<Prisoner> tv = new TableView<>();
TableColumn<Prisoner, String> idColumn = new TableColumn<>("ID");
TableColumn<Prisoner, String> nCaseColumn = new TableColumn<>("N° Case");

您没有在课程中显示方法;我将假设您遵循标准Java naming conventions(我更改了上面的一些变量名称以符合这些)。然后就可以了

idColumn.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getId()));
// or 
// idColumn.setCellValueFactory(new PropertyValueFactory<>("id")); 
// but the first version above is better, imho

nCaseColumn.setCellValueFactory(cellData -> 
    new SimpleStringProperty(cellData.getValue().getCase().getIdCase()));

答案 1 :(得分:-1)

TableView只能显示一种类型的行。如果需要在同一个TableView上使用来自两个不同类的数据,最好的选择是创建两个类的包装类。

Check this link