2

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 によると、最小幅などのために変更を強制する必要がある他のコントロールがないことがわかります。

4

0 に答える 0