将 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>
但同样,这里的滚动窗格是多余的。
相关 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>
但同样,这里的滚动窗格是多余的。