【问题标题】:Right column of a horizontally-scrollable TableView is not showing completely可水平滚动的 TableView 的右列未完全显示
【发布时间】:2017-01-27 09:37:01
【问题描述】:

我有一个包含许多列的 TableView,因此我的表格可以水平滚动。如果我让单元格内容左对齐,它看起来像预期的那样:

将其更改为右对齐后,最后一列的末尾部分会被垂直滚动滑块覆盖。所以并不是所有的内容都是可见的:

知道怎么解决吗?

TableView 类:

class DataTableView {

private TableView <DataTableModel> dataTable = new TableView<>();

DataTableView(DataObject dataObject)
{
    dataTable.setId("dataTable");
    dataTable.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);

    populateTable(dataObject);
}

private void populateTable(DataObject dataObject)
{
    dataTable.getItems().clear();
    dataTable.getColumns().clear();
    dataTable.setPlaceholder(new Label("Loading..."));

    Task<Void> task = new Task<Void>()
    {
        @Override
        protected Void call() throws Exception
        {
            List <String>headerTexts = new ArrayList<>();

            dataObject.getColumnsDataTable().forEach(name ->
                                headerTexts.add(name.getName()+'\n'+name.getUnit()));

            Platform.runLater(new Runnable()
            {
                @Override
                public void run()
                {
                    dataTable.getColumns().add(createIndexColumn());

                    for (int columnIndex = 0; columnIndex < headerTexts.size(); columnIndex++)
                    {
                        dataTable.getColumns().add(
                                createColumn(columnIndex, headerTexts.get(columnIndex)));
                    }
                }
            });

            Platform.runLater(new Runnable()
            {
                @Override
                public void run()
                {
                    for(DataTableModel data : prepareDataModel(dataObject))
                    {
                        dataTable.getItems().add(data);
                    }
                }
            });
            return null;
        }
    };
    Thread thread = new Thread(task);
    thread.setDaemon(true);
    thread.start();
}

private TableColumn <DataTableModel,String>  createIndexColumn ()
{
    TableColumn<DataTableModel,String> column = new TableColumn< >("No");

    column.setSortable(false);
    column.setCellFactory(col ->
    {
        TableCell<DataTableModel, String> cell = new TableCell<>();
        cell.textProperty().bind(Bindings.when(cell.emptyProperty())
                .then("")
                .otherwise(cell.indexProperty().add(1).asString()));

        return cell ;
    });
    return column;
}

private TableColumn <DataTableModel, String> createColumn(final int columnIndex, String columnTitle )
{
    TableColumn<DataTableModel, String> column = new TableColumn<>(columnTitle);

    column.setCellValueFactory(cellData -> cellData.getValue().getRow().get(columnIndex));

    column.setSortable(false);

    return column;
}

private ObservableList <DataTableModel> prepareDataModel(DataObject dataObject)
{
    ObservableList <DataTableModel> dataTableModel = FXCollections.observableArrayList();
    dataObject.getDataTableData().forEach(row -> dataTableModel.add(new DataTableModel(row)));

    return dataTableModel;
}

public TableView getDataTableView (){
    return dataTable;
}

}

第二张截图的 CSS:

#dataTable .table-cell {
    -fx-alignment: center-right;
    -fx-padding: 0 0 0 0;
}

表模型:

public class DataTableModel {

    private ObservableList<StringProperty> row = FXCollections.observableArrayList();

    public DataTableModel(List <String> data)
    {
        data.forEach(element -> row.add(new SimpleStringProperty(element)));
    }

    public void setRow(ObservableList<StringProperty> row) {
        this.row = row;
    }

    public ObservableList<StringProperty> getRow() {
        return row;
    }

    public int size() {
        return row.size();
    }
}

【问题讨论】:

  • 如果可能的话 setPrefWidth for TableView 它可以提供帮助。如果为列设置任何宽度,最好的方法是设置列宽度之和。
  • 什么是结果?有用吗?
  • 不幸的是,TableView 的 setPrefWidth 不起作用。单元格内容的末尾部分仍然隐藏在滚动滑块下。
  • 如果可以附上您的代码,它将更有可能提供帮助。
  • 我已将代码添加到原始帖子中。谢谢。

标签: java javafx scroll tableview


【解决方案1】:

您使用什么 JavaFx 版本?我在使用 JavaFX 8 时遇到了同样的问题。使用较新版本时问题已解决(至少使用 JavaFX 12 或更高版本已修复)。

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
  • 这并不能真正回答问题。如果您有其他问题,可以点击 进行提问。要在此问题有新答案时收到通知,您可以follow this question。一旦你有足够的reputation,你也可以add a bounty 来引起对这个问题的更多关注。 - From Review
猜你喜欢
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 1970-01-01
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
相关资源
最近更新 更多