这似乎是一个简单的问题,但我只能得到单元格的真实值,而不是显示文本,因为我使用 tableColumn.setCellFactory 来更改单元格的显示文本(使用一种方法将真实值转换为我不想要的文本),所以单元格将有 2 个值:显示文本和实际值。我可以重新转换,但这是一个愚蠢的解决方案:(
cell = t.getColumns().get(col).getCellData(row);
您无法直接访问渲染器。其中一个原因是您必须访问包含显示节点的 VirtualFlow。但是,我给你一个答案,你发布的详细信息:
为了实现不可知的导出功能(到 CSV、XLS 等),从表格视图请求单元格文本而不是数据会非常方便。那可能吗?
对于任何类型的导出,请使用转换器。
你永远不知道你的用户有什么目标格式。您的用户在 JavaFX 应用程序中的数字格式设置可能与他们在 Excel 中的不同。使用 Excel,您需要获取 JavaFX 模型数据并设置 Excel 的模型数据。不要使用视图数据导出并期望在 Excel 视图中导入会起作用,你会遇到问题。
CSV 也一样。例如,如果您使用德语本地化,那么在您的表中,2 位小数将看起来像 123,45 而不是 123.45。因此,当您导出表格的视图数据时,您将破坏 CSV 格式。
您将无法通过适当的转换器导出模型数据。
您可以使用 getItems() 方法来访问 Table 的模型。根据行 ID,您可以获得该行的 DataModel。
tblSampleTable.getItems().get(rowId);
所以你有对 DataModel 的引用,这意味着你可以访问所有数据(实际数据)
如果您需要获取 TableView 的显示文本,您可以这样做:
public void showAllText(TableView<?> tv){
for (Node r: tv.lookupAll(".table-row-cell")) {
for (Node c: r.lookupAll(".table-cell")) {
TableCell<?, ?> tc=(TableCell<?, ?>) c;
System.out.print(tc.getText()+" \t ");
}
System.out.println("");
}
}
祝你好运。