将数据写入JavaFX Tableview

时间:2016-04-07 15:56:59

标签: java javafx tableview

我以前从未使用过tableview,而且我对Java和JavaFX也很陌生。我试图镜像一个例子,但由于数据来自内部创建的数据库客户端,我无法完全复制它。无论如何,我的数据进入了表格,但它的输入看起来像csv数据,并且每列都没有被放入其各自的列中。这是一个截图,以澄清我的问题:

enter image description here

在此处获取专栏

   for (Column col : drs.getColumns()){
        TableColumn tblCol = new TableColumn(col.getName());
        tblCol.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){
            public ObservableValue<String> call(CellDataFeatures<ObservableList, String> p) {
                return new SimpleStringProperty(p.getValue().toString());
            }
        });
         table.getColumns().addAll(tblCol);
    }

获取行:

while (drs.hasNextRow()) {
    ObservableList<String> row = FXCollections.observableArrayList();
    for (int i = 0; i < drs.getColumns().length; i++) {
        row.add(drs.getNextRow().getItem(i) + "");
    }
    data.add(row);
}

这是我将数据发送到桌面失败的地方。

table.setItems(data);
System.out.println("dis is data: " +data);

数据打印如下:

dis is data: [[data, data, data....], [data, data, data....], [data, data, data....]]

它将每个[row]并将其放入每个记录的每列中。我假设我需要数据看起来像:

[[data], [data], [data]....[data]], [[data], [data], [data]....[data]], [[data], [data], [data]....[data]]
    } catch(Exception e){
        e.printStackTrace();
        System.out.println("everything is broken");
    }
}

所以,我迷路了。我不知道自己在做什么,感谢你能给我提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

TableColumn.cellValueFactory中,行中的所有数据都与项目相关联。 TableView<ObservableList<String>> table = ... int index = 0; for (Column col : drs.getColumns()) { final int columnIndex = index++; TableColumn<ObservableList<String>, String> tblCol = new TableColumn(col.getName()); tblCol.setCellValueFactory(new Callback<CellDataFeatures<ObservableList<String>, String>, ObservableValue<String>>(){ public ObservableValue<String> call(CellDataFeatures<ObservableList, String> p) { return Bindings.stringValueAt(p.getValue(), columnIndex); } }); table.getColumns().add(tblCol); } 用于选择应在列中显示的项目的“部分”。因此,您应该使用它来选择值:

ObservableList

此处Paper用于从while (drs.hasNextRow()) { ObservableList<String> row = FXCollections.observableArrayList(); Row sourceRow = drs.getNextRow(); for (int i = 0; i < drs.getColumns().length; i++) { row.add(Objects.toString(sourceRow.getItem(i))); } data.add(row); } 中选择元素。

此外,您需要每行使用一行:

{{1}}