2017-05-27 27 views
1

我正在開發一個會計學生出勤計劃。我需要一個包含第一列的表格 - 學生列表(TableColumn)和我動態生成的下一列(講座列表)。在行和列的交叉點 - ComboBox。我發現如何爲一種類型(TableView >>)動態生成列,但沒有找到我的案例的解決方案。 我有一個想法,以創建一個額外的類如何使用動態生成的不同類型的列創建tableview?

class Row{ 
    StringProperty audience; 
    ObservableList<Attendence> lectures; 
} 

,但不知道如何實現它。 如何解決這個問題?

回答

2

你的想法基本上是正確的:

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); 
    } 
} 

現在你可以設置你的表,如下所示:

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); 
} 
+0

謝謝!現在嘗試。 –

相關問題