JavaFX TableView - 滚动条和自动调整表格列大小

问题描述 投票:0回答:1

我正在尝试拥有一个带有自动调整大小的列和滚动条的 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
}

}

javafx scroll tableview tablecolumn
1个回答
0
投票

非常感谢您的所有建议。最终的工作是将 TableView 包装在 StackPane 中,并且我还认为 TableView 需要数据。空列本身没有添加滚动条。列现在也在调整大小,它们只是非常小以适应整个列标题,所以我想我只需要稍微扩大相对宽度。

© www.soinside.com 2019 - 2024. All rights reserved.