Javafx 2 在tableview中显示来自多个类的数据
我试图用来自多个类的数据填充tableview。下面的代码正在用数据填充表,但它正在为每一列创建新行 代码如下:Javafx 2 在tableview中显示来自多个类的数据,javafx-2,tableview,Javafx 2,Tableview,我试图用来自多个类的数据填充tableview。下面的代码正在用数据填充表,但它正在为每一列创建新行 代码如下: try { col_Result_marks.setCellValueFactory(new PropertyValueFactory("MARKS")); col_Result_course.setCellValueFactory(new PropertyValueFactory("NAME")); col_Result_tst
try {
col_Result_marks.setCellValueFactory(new PropertyValueFactory("MARKS"));
col_Result_course.setCellValueFactory(new PropertyValueFactory("NAME"));
col_Result_tstdt.setCellValueFactory(new PropertyValueFactory("TSTDT"));
DBAccess db = new DBAccess();
db.DBConn("SELECT blah blah...");
ObservableList dataset = FXCollections.observableArrayList();
while(db.resultSet.next()){
Result rslt = new Result();
rslt.setMARKS(db.resultSet.getInt("MARKS"));
Test tst = new Test();
tst.setTSTDT(db.resultSet.getDate("TST_DT"));
Course crs = new Course();
crs.setNAME(db.resultSet.getString("SUB"));
dataset.addAll(rslt,tst,crs);
}
db.ConnClose();
tbl_Result.setItems(dataset);
}
输出类似于:
<null> <null> rslt
<null> tst <null>
crs <null> <null>
只需使用字符串即可创建表视图,而无需获取三个对象。像这样:
TableView<ObservableList<String>> table = new TableView<>();
TableView table=newtableview();
并定义要获取字符串的列:
for (int i = 0; i < NUM_COLUMNS; i++) {
TableColumn<ObservableList<String>, String> col = new TableColumn<>("Col#"+i);
final int finalI = i;
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {
return new SimpleStringProperty(cdf.getValue().get(finalI));
}
});
table.getColumns().add(col);
}
for(int i=0;i
因此,在更新表视图时,可以基于这三个对象构建字符串列表
希望有帮助。您在数据集中为每个SQL结果添加了三个对象,因此JavaFX添加了三行。您可能需要添加一个带有MARKS、rsr和src属性的类。@如果您的意思是这样的话,那么为查询输出创建一个单独的类是不可行的。我的每个主要实体都有单独的类。有什么关于实施的建议吗?我是javafx的新手,请原谅我的无知。不幸的是,它不适合我。它说:类型回调不是泛型的;不能使用参数对其进行参数化
for (int i = 0; i < NUM_COLUMNS; i++) {
TableColumn<ObservableList<String>, String> col = new TableColumn<>("Col#"+i);
final int finalI = i;
col.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList<String>,String>, ObservableValue<String>>() {
@Override
public ObservableValue<String> call(CellDataFeatures<ObservableList<String>, String> cdf) {
return new SimpleStringProperty(cdf.getValue().get(finalI));
}
});
table.getColumns().add(col);
}