首页 > 解决方案 > TableView 不使用滚动条显示所有列

问题描述

我正在使用 TableView 并动态添加列。列标题嵌套在有周标题的地方,该周的每一天嵌套在周标题下。

        TableColumn<EmployeeForWeeksDbm, String> week2fx = new TableColumn<>("Week " + (weekNum ));
        week2fx.setSortable(false);

        TableColumn<EmployeeForWeeksDbm, String> day21fx = new TableColumn<>(dateHeader(ld));
        day21fx.setCellValueFactory(cellData -> cellData.getValue().d8Property());
        day21fx.setCellFactory(ComboBoxTableCell.forTableColumn(ltList));
        day21fx.setSortable(false);

        ldAdjust = ld.plusDays(1);
        TableColumn<EmployeeForWeeksDbm, String> day22fx = new TableColumn<>(dateHeader(ldAdjust));
        day22fx.setCellValueFactory(cellData -> cellData.getValue().d9Property());
        day22fx.setCellFactory(ComboBoxTableCell.forTableColumn(ltList));
        day22fx.setSortable(false);

然后我将天数添加到星期标题中;

week2fx.getColumns().addAll(day21fx,day22fx,day23fx,day24fx,day25fx,day26fx,day27fx);

因为我有 4 周的时间要展示;

mainscheduleTVfx.getColumns().addAll(employeefx,week1fx,week2fx,week3fx,week4fx);

每件事都正确添加,并按预期显示。数据加载,组合框工作,一切都很棒!但是,当窗口缩小时,滚动条会被启用(使用默认的 TableView 滚动条),当我们滚动到最右边时,最后一列似乎被剪掉了。

此图显示了 TableView 的右边缘

起初我以为我错误地使用了 Scenebuilder 但我只能拥有 TableView 而没有其他任何东西它仍然会剪辑结尾

这是场景的代码;

<AnchorPane fx:id="anchorpanefx" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.171" xmlns:fx="http://javafx.com/fxml/1" fx:controller="Controller_SchedMan">
   <children>
      <TableView fx:id="mainscheduleTVfx" layoutX="184.0" layoutY="42.0" prefHeight="400.0" prefWidth="600.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0" />
   </children>
</AnchorPane>

这是标题标题的代码,以防您想知道;

 private String dateHeader(LocalDate ld) {
        String dayHeader = ld.format(DateTimeFormatter.ofPattern("MMM-dd"));
        return dayHeader;
    }

我做什么似乎并不重要,我最后得到了剪辑。我认为这是我创建和添加列的方式,但我不确定我哪里出错了。除了最后一列剪裁之外,其他一切都再次完美运行。我还注意到,如果我不添加尽可能多的“周”,剪裁就会减少。好吧,似乎是这样。

提前致谢!

标签: tableviewjavafx-8

解决方案


我发现通过设置最大宽度,我能够消除剪裁。

day21fx.setMaxWidth(60);//截取当天

我还必须确保为上游标头设置了最大值;week2fx.setMaxWidth(60*7);

尽管已经解决了这个问题,但我不太明白为什么 TableView 首先会剪辑。我想更多的阅读。


推荐阅读