我以前从未使用过tableview,而且我对Java和JavaFX也很陌生。我试图镜像一个例子,但由于数据来自内部创建的数据库客户端,我无法完全复制它。无论如何,我的数据进入了表格,但它的输入看起来像csv数据,并且每列都没有被放入其各自的列中。这是一个截图,以澄清我的问题:
在此处获取专栏
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");
}
}
所以,我迷路了。我不知道自己在做什么,感谢你能给我提供的任何帮助。
答案 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}}