将 TableView prefWidthProperty 绑定到它的 Parent 容器的 prefWidthProperty 时出现问题

Problem Binding TableView prefWidthProperty to it's Parent Container's prefWidthProperty

相关 FXML:

<ScrollPane fx:id="scrollpane_var" hbarPolicy="NEVER" prefHeight="200.0" prefWidth="200.0" GridPane.columnSpan="3" GridPane.rowIndex="2" GridPane.rowSpan="5">
         <content>
            <TableView fx:id="tableview_var" prefHeight="169.0" prefWidth="292.0">
              <columns>
                <TableColumn prefWidth="69.0" text="Quantité" />
                <TableColumn prefWidth="161.0" text="Nom" />
                  <TableColumn prefWidth="56.0" text="Prix" />
              </columns>
            </TableView>
         </content>
      </ScrollPane>

控制器class代码:

public class Lancer {

    @FXML // fx:id="scrollpane_var
    private ScrollPane scrollpane_var; // Value injected by FXMLLoader

    @FXML // fx:id="tableview_var"
    private TableView<String> tableview_var; // Value injected by FXMLLoaderte void initialize()

    public void initialize() {
    tableview_var.prefWidthProperty().bind(scrollpane_var.prefWidthProperty());
    }

视觉表示:

Click to see Scenebuilder screenshot

正如标题所说,我正在尝试将 TableView 的宽度绑定到它的 Parent 容器,文档有点混乱,因为我是 GUI 应用程序的新手。

这行代码是我得到的最远的代码,我不知道为什么它不起作用:

 public void initialize() {
        tableview_var.prefWidthProperty().bind(scrollpane_var.prefWidthProperty());
        }

A TableView 管理它自己的滚动,所以你根本不应该把它放在 ScrollPane 里面。完全从布局中省略滚动窗格。

一般来说,如果您希望滚动窗格的内容适合滚动窗格的可用宽度,您可以使用 fitToWidth property,而不是尝试使用绑定。通常,像这样绑定首选项宽度不是一个好主意;如果您使用的布局或容器没有提供您需要的功能,而且它几乎总是会提供,您应该子类化 Pane 并覆盖 layoutChildren() 和其他方法。在这里,TableView 已经提供了滚动,在更一般的情况下,ScrollPane 允许您指定内容应适合滚动窗格的宽度。

<ScrollPane ... fitToWidth="true>
    <!-- ... -->
</ScrollPane>

但同样,这里的滚动窗格是多余的。