Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
滚动JTree,使最后一行位于Java中JScrollPane的顶部_Java_Swing_Scroll - Fatal编程技术网

滚动JTree,使最后一行位于Java中JScrollPane的顶部

滚动JTree,使最后一行位于Java中JScrollPane的顶部,java,swing,scroll,Java,Swing,Scroll,我在JScrollPane中显示了一个大的JTree(许多节点)。我想允许最后一个树节点显示在JScrollPane的顶部。Swing在默认情况下似乎不允许这样做,它显示了(完全扩展的)JTree,最后一个节点位于JScrollPane的底部。JScrollBar拇指正在触摸其轨迹的底部 我正在使用JViewport.setViewPosition()方法将树节点的左上位置设置为JViewport中的左上位置,但如果这会导致它在JTree底部显示“空白”,它将拒绝这样做 我尝试通过将大小(.se

我在JScrollPane中显示了一个大的JTree(许多节点)。我想允许最后一个树节点显示在JScrollPane的顶部。Swing在默认情况下似乎不允许这样做,它显示了(完全扩展的)JTree,最后一个节点位于JScrollPane的底部。JScrollBar拇指正在触摸其轨迹的底部

我正在使用JViewport.setViewPosition()方法将树节点的左上位置设置为JViewport中的左上位置,但如果这会导致它在JTree底部显示“空白”,它将拒绝这样做


我尝试通过将大小(.setViewSize设置为其旧值+额外的.getExtentSize()高度)来操作JViewport,但它仍然拒绝允许拇指向下移动,即使它现在不在轨迹底部。我正在调整事件处理程序(.addChangeListener)中的JViewport大小。

我想您可以将JTree的首选大小覆盖为默认首选大小加上视口的范围大小减去JTree一行的高度。

如果您将JTree放在底部有空白的VBox中,然后用JScrollPane包装VBox?

问题是,一旦我设置了JTree首选大小,它就无法通过新的节点扩展/折叠(请参阅
JComponent.getPreferredSize()的源代码)
@Ralph,我想我没有明确说明。我不是说你应该使用setPreferredSize()方法。我的意思是,您可以尝试重写getPreferredSize()方法,首先调用默认实现,然后添加一些额外的高度来考虑视口高度。感谢您的澄清。星期一早上我会试试的。那似乎管用。我扩展了JTree并重写了getPreferredSize以返回
super.getPreferredSize()
加上
JViewport
范围高度减去行高。