JavaFX获取TreeView';预宽

JavaFX获取TreeView';预宽,java,javafx,treeview,width,treecell,Java,Javafx,Treeview,Width,Treecell,我一直在尝试确定TreeView的首选宽度,但当我调用getPrefWidth()时得到的结果是-1。这有什么原因吗?对我来说,首选宽度是最宽单元格的宽度。该值必须存储在某个位置,因为当树状视图没有足够的空间显示其所有内容时,滚动条会显示出来。您得到了该值(这基本上意味着树状视图的首选宽度不是硬编码的,而是根据其皮肤子节点的首选宽度计算出来的)。通常在任何给定时间都没有理由知道首选宽度,但如果确实需要,请尝试调用prefWidth(-1)(或者prefWidth(prefHeight(-1))。

我一直在尝试确定TreeView的首选宽度,但当我调用
getPrefWidth()
时得到的结果是
-1
。这有什么原因吗?对我来说,首选宽度是最宽单元格的宽度。该值必须存储在某个位置,因为当树状视图没有足够的空间显示其所有内容时,滚动条会显示出来。

您得到了该值(这基本上意味着树状视图的首选宽度不是硬编码的,而是根据其皮肤子节点的首选宽度计算出来的)。通常在任何给定时间都没有理由知道首选宽度,但如果确实需要,请尝试调用
prefWidth(-1)
(或者
prefWidth(prefHeight(-1))
。“该值必须存储在某个地方”:我不认为是,实际上,我认为它是在布局传递过程中需要时计算的。我尝试调用
prefWidth(-1)
。它给了我一些东西,但它不是我需要的价值。在内部,皮肤似乎通过调用
VirtualFlow
上的
getWidth()
来获得宽度。我试图使用反射来访问它,但我失败了,因为我正在用Java 9开发。你可以使用CSS查找来导航场景图,但我认为这会导致疯狂。。。你为什么需要这个?也许有另一个解决方案完全可以解决您试图做的事情。我正在
拆分窗格中使用
树视图
。现在SplitPane使树视图尽可能大,因为没有设置maxWidth。我不想将其设置为任何随机值,因为根据您使用的显示器,这些值可能会有很大的变化。我一直在尝试获取的“prefWidth”是我想要为TreeView设置的最大宽度。您正在获取该值(这基本上意味着树视图的首选宽度不是硬编码的,而是根据其蒙皮子节点的首选宽度计算的)。通常在任何给定时间都没有理由知道首选宽度,但如果确实需要,请尝试调用
prefWidth(-1)
(或者
prefWidth(prefHeight(-1))
。“该值必须存储在某个地方”:我不认为是,实际上,我认为它是在布局传递过程中需要时计算的。我尝试调用
prefWidth(-1)
。它给了我一些东西,但它不是我需要的价值。在内部,皮肤似乎通过调用
VirtualFlow
上的
getWidth()
来获得宽度。我试图使用反射来访问它,但我失败了,因为我正在用Java 9开发。你可以使用CSS查找来导航场景图,但我认为这会导致疯狂。。。你为什么需要这个?也许有另一个解决方案完全可以解决您试图做的事情。我正在
拆分窗格中使用
树视图
。现在SplitPane使树视图尽可能大,因为没有设置maxWidth。我不想将其设置为任何随机值,因为根据您使用的显示器,这些值可能会有很大的变化。我一直试图得到的“prefWidth”是我想要为TreeView设置的最大宽度。