我有一个SplitPane
行为很奇怪。它是“自发地”移动而无需用户交互。
这是示例 FXML 布局:
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.60" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.Controller">
<children>
<SplitPane fx:id="splitPane" dividerPositions="0.29797979797979796" layoutX="100.0" layoutY="67.0" prefHeight="160.0" prefWidth="200.0" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0">
<items>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" />
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="160.0" prefWidth="100.0" />
</items>
</SplitPane>
</children>
</AnchorPane>
和控制器:
public class Controller {
@FXML
private SplitPane splitPane;
@FXML
private void initialize() {
// Add Listener to the divider value
splitPane.getDividers().get(0).positionProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("newValue = " + newValue);
});
splitPane.getDividers().get(0).setPosition(0.80);
}
}
在这里,我将监听器设置在唯一的分频器上,以便在它改变时输出它的当前值。就在下面,我将其设置为0.80
.
这是输出:
newValue = 0.8
newValue = 0.7986577181208053
您会看到它在最初设置后确实发生了变化。虽然在示例中这种变化很小,但在我的主应用程序中问题更加严重。
我试图在我的程序运行之间保存分隔线的位置,但是随着位置值每次都会自行变化,小问题变成了大问题。
这里发生了什么,我怎样才能防止它改变?根据 FXML,您可以看到由于最小宽度等原因,没有其他控件应该强制更改。