1

SplitPaneメイン GUI に奇妙な動作をしている があります。プログラムの実行間の位置を保存しようとしていますが、単純なテキストファイルを読み書きすることでそうしています。

getPosition()ただし、メソッドをファイルに保存するときに、メソッドが間違った値を返すことに気付きました。

プログラムを終了するとき、私はこのコードで位置を保存しています:

Settings.setSplitPaneLocation(Global.commentMasterController.getSplitPane().getDividers().get(0).getPosition());
  • Global私のメインGUIコントローラーへの参照を保持するシングルトンです。
  • Settings設定ファイルからロードされた値を含む別のシングルトンです。

プログラムをロードすると、クラスSplitPaneから最後に保存された値をロードして、の位置を設定します。Settings

splitPane.setDividerPosition(0, Settings.getSplitPaneLocation());

問題は、プログラムをロードするときに、位置をまったく調整しなくてもSplitPane(プログラムをロードしてすぐに終了する)、保存された位置が最初に設定された位置と異なることです。

これは、プログラムの 3 つの連続した実行を示す出力です。繰り返しますが、これはプログラムを実行してすぐに終了するだけです。コントロールの位置をまったく調整しません。

setDividerPosition(): 0.9247730220492867
getDividerPosition(): 0.9105058365758755

setDividerPosition(): 0.9105058365758755
getDividerPosition(): 0.893644617380026

setDividerPosition(): 0.893644617380026
getDividerPosition(): 0.874189364461738

ご覧のとおりgetDividerPosition()、分割線の実際の位置とは異なる値を返します。

内の子ノードの最大/最小サイズを確認しましたがSplitPane、最小サイズは 0 に設定されています。

4

2 に答える 2

1

JavadocからSplitPane

分割線の位置の範囲は 0 から 1.0 (両端を含む) です。0 の位置は、SplitPane の左端/上端にノードの最小サイズを加えた位置に仕切りを配置します。SplitPane1.0 の位置は、ノードの最小サイズを引いた右/下端に仕切りを配置します。仕切りの位置を 0.5 にすると、仕切りが の中央に配置されSplitPaneます。分割線の位置をノードの最大サイズの位置より大きく設定すると、分割線はノードの最大サイズの位置に設定されます。分割線の位置をノードの最小サイズの位置より小さく設定すると、分割線はノードの最小サイズの位置に設定されます。したがって、 と で設定されsetDividerPosition(int, double)setDividerPositions(double...)値は、 で返される値と同じではない場合がありますgetDividerPositions()

(私の強調)あなたが何をしているのかをもっと知らなければ、あなたが観察している行動について正確に知ることは難しいですが、あなたが設定している値はコンテンツの最小/最大サイズを考慮して調整されているのではないかと思います.ノード。

于 2016-08-15T14:41:11.310 に答える