我的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。