我正在尝试拥有一个带有自动调整大小的列和滚动条的 TableView。
TableView 位于我的 FXML 文件中,并且我没有将其包装在任何窗格中。我读过 TableView 应根据需要自动添加滚动条,并且您不需要在 ScrollPane 中添加它。我还希望 TableColumns 在添加标题(第一行)时调整宽度大小(一旦稍后添加,则不必调整数据大小)。
这是我的 TableView,位于选项卡上,位于我的 FXML 文件中:
<Tab text="Prefill PDFs from Excel Template">
<content>
<TableView fx:id="tvReadExcelFile1" prefHeight="515.0" prefWidth="1004.0" />
</content>
</Tab>
这里是我用列标题(来自 Excel 文件)填充 TableView 的地方。按预期工作,但 TableView 不会自动添加滚动条,而且我似乎无法让列的宽度自动调整大小。您将看到 ScrollPane 被引用,但那是针对 TextFlow 控件的。
protected void handleOpenPrefillTemplate(ActionEvent actionEvent) throws IOException, InvalidFormatException {
int nColCount;
int nRowCount;
tvReadExcelFile1.getItems().clear();
tvReadExcelFile1.getColumns().clear();
File filePrefillTemplate = XT4FileDialog.handleOpenFileDialog("Excel File", "*.xlsx");
if (filePrefillTemplate == null) {
Text txtNullFile = new Text("File selected is null.\n");
tfInfo.getChildren().add(txtNullFile);
scrollPaneInfo.setVvalue(1.0);
return;
}
try {
XSSFWorkbook xWorkbook = new XSSFWorkbook(filePrefillTemplate);
XSSFSheet xSheet = xWorkbook.getSheet("info");
XSSFSheet ySheet = xWorkbook.getSheet("data");
nColCount = ySheet.getRow(0).getLastCellNum();
nRowCount = ySheet.getLastRowNum();
Row yRow = ySheet.getRow(0);
for (int cCounter = 0; cCounter < nColCount; cCounter++) {
Cell yCell = yRow.getCell(cCounter);
final int finCounter = cCounter;
final TableColumn<ObservableList, String> column = new TableColumn<>(yCell.getStringCellValue().toString());
tvReadExcelFile1.getColumns().add(column);
column.setCellValueFactory(new Callback<>() {
public ObservableValue<String> call(TableColumn.CellDataFeatures<ObservableList, String> param) {
return new SimpleStringProperty(param.getValue().get(finCounter).toString());
}
});
}
tvReadExcelFile1.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);
xWorkbook.close();
} catch (IOException ioException) {
// IO Exception
} catch (InvalidFormatException invalidFormatException) {
// Invalid format exception
}
}
非常感谢您的所有建议。最终的工作是将 TableView 包装在 StackPane 中,并且我还认为 TableView 需要数据。空列本身没有添加滚动条。列现在也在调整大小,它们只是非常小以适应整个列标题,所以我想我只需要稍微扩大相对宽度。