2015-06-18 101 views
0

我遇到了問題,表中的每個列都採用完全相同的值。更具體地說,它們都承擔了第二列應具有的價值。在JavaFX的tableview中添加數據會給每列提供相同的值

但是,列名稱本身很好。

比方說,我有一個ObeservableList<ObservableList> data

我填充data所以它看起來像:

[[11,12,13,14],[21,22,23,24],[31,32,33,34]]

我的表(Java小程序,但我寫的文字到這裏)結束了尋找像這樣:

Cat1|Cat2|Cat3|Cat4  when I want it to be: Cat1|Cat2|Cat3|cat4 
12 | 12 | 12 | 12        11 | 12 | 13 | 14 
22 | 22 | 22 | 22        .... 
32 | 32 | 32 | 32 
... 

任何人都知道問題是什麼?

這裏是爲實現代碼如下部分

System.out.println(data) tableview.setItems(data)

我以爲這樣就足以做到這一點的代碼?

回答

0

您需要向每列添加一個CellValueFactory,它告訴列,需要顯示來自嵌套ObservableList的哪個值。

例如:

@FXML 
private TableView<ObservableList> productsTable 
@FXML 
private TableColumn<ObservableList, String> column1 
@FXML 
private TableColumn<ObservableList, String> column2 

... 

    column1.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
     @Override 
     ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) { 
      return new SimpleStringProperty(param.getValue().getAt(0).toString()); 
     } 
    }); 
    column2.setCellValueFactory(new Callback<TableColumn.CellDataFeatures<ObservableList, String>, ObservableValue<String>>() { 
     @Override 
     ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) { 
      return new SimpleStringProperty(param.getValue().getAt(1).toString()); 
     } 
    }); 
+0

明白了,謝謝!我在for循環裏面有一個,我不小心插入了1而不是i,所以不是遍歷列表中的每個元素,而是遍歷第二個元素。 – Marcin

相關問題