如何使用动态生成的不同类型的列创建表视图?
How to create tableview with dynamically generated columns of different types?
我正在开发一个计算学生出勤率的程序。我需要一个带有第一列的 table - 学生列表(TableColumn)和我动态生成的下一列(讲座列表)。在行和列的交叉点 - ComboBox。我找到了如何为一种类型(TableView>>)动态生成列,但没有找到适合我的案例的解决方案。
我想再创建一个 class
class Row{
StringProperty audience;
ObservableList<Attendence> lectures;
}
但不明白如何实现。
如何解决这个问题??
你的想法基本正确:
public class Row{
private final StringProperty audience = new SimpleStringProperty();
private final List<ObjectProperty<Attendance>> lectures = new ArrayList<>();
public Row(String audience, int numAttendances) {
setAudience(audience);
for (int i = 0 ; i < numAttendances ; i++) {
lectures.add(new SimpleObjectProperty<>());
}
}
public List<ObjectProperty<Attendance>> getLectures() {
return lectures ;
}
public StringProperty audienceProperty() {
return audience ;
}
public final String getAudience() {
return audienceProperty().get();
}
public final void setAudience(String audience) {
audienceProperty().set(audience);
}
}
现在您可以按如下方式设置 table:
int numLectures = ... ;
TableView<Row> table = new TableView<>();
TableColumn<Row, String> audienceCol = new TableColumn<>("Audience");
audienceCol.setCellValueFactory(cellData -> cellData.getValue().audienceProperty());
table.getColumns().add(audienceCol);
for (int i = 0 ; i < numLectures ; i++) {
TableColumn<Row, Attendance> col = new TableColumn<>("Attendance "+ (i+1));
final int colIndex = i ;
col.setCellValueFactory(cellData -> cellData.getValue().getLectures().get(colIndex));
table.getColumns().add(col);
}
我正在开发一个计算学生出勤率的程序。我需要一个带有第一列的 table - 学生列表(TableColumn)和我动态生成的下一列(讲座列表)。在行和列的交叉点 - ComboBox。我找到了如何为一种类型(TableView>>)动态生成列,但没有找到适合我的案例的解决方案。 我想再创建一个 class
class Row{
StringProperty audience;
ObservableList<Attendence> lectures;
}
但不明白如何实现。 如何解决这个问题??
你的想法基本正确:
public class Row{
private final StringProperty audience = new SimpleStringProperty();
private final List<ObjectProperty<Attendance>> lectures = new ArrayList<>();
public Row(String audience, int numAttendances) {
setAudience(audience);
for (int i = 0 ; i < numAttendances ; i++) {
lectures.add(new SimpleObjectProperty<>());
}
}
public List<ObjectProperty<Attendance>> getLectures() {
return lectures ;
}
public StringProperty audienceProperty() {
return audience ;
}
public final String getAudience() {
return audienceProperty().get();
}
public final void setAudience(String audience) {
audienceProperty().set(audience);
}
}
现在您可以按如下方式设置 table:
int numLectures = ... ;
TableView<Row> table = new TableView<>();
TableColumn<Row, String> audienceCol = new TableColumn<>("Audience");
audienceCol.setCellValueFactory(cellData -> cellData.getValue().audienceProperty());
table.getColumns().add(audienceCol);
for (int i = 0 ; i < numLectures ; i++) {
TableColumn<Row, Attendance> col = new TableColumn<>("Attendance "+ (i+1));
final int colIndex = i ;
col.setCellValueFactory(cellData -> cellData.getValue().getLectures().get(colIndex));
table.getColumns().add(col);
}