2016-08-15 154 views
0

我在我的主GUI中有一个SplitPane行为奇怪。我试图通过编写/阅读简单的文本文件来保存执行程序之间的位置。(JavaFX)SplitPane.getDividerPositions()不一致

但是,我注意到getPosition()方法在将其保存到文件时返回不正确的值。

在退出程序,我现在的储蓄与此代码的位置:

Settings.setSplitPaneLocation(Global.commentMasterController.getSplitPane().getDividers().get(0).getPosition()); 
  • Global是一个Singleton保存到我的主界面控制器引用。
  • 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

回答

1

Javadocs for SplitPane

除法的位置范围是从0至1.0 (包括的)。 0 的位置将把分频器放置在SplitPane的左边/最上边,加上节点的最小大小。 1.0的位置会将SplitPane的右边/最下边缘的分隔符 减去节点的最小尺寸 。 0.5的分频器位置将使分频器 位于SplitPane的中间。设置比节点的最大大小位置大 的分频器位置将导致设置在节点的最大大小位置的分频器为 。将分隔符位置 设置为小于节点的最小大小位置将导致将分隔符 设置为节点的最小大小位置。 因此值 集setDividerPosition(int, double)setDividerPositions(double...)可能不与由getDividerPositions()返回的值 。

(我的重点。)在不了解你正在做什么的情况下,很难准确地了解你正在观察的行为,但我怀疑你正在设置的值正在根据内容节点的最小/最大大小进行调整。

+0

我用更多的细节/代码更新了我的问题。我已经检查了孩子的最小规模,问题依然存在。 – Zephyr