滚动JTree,使最后一行位于Java中JScrollPane的顶部
我在JScrollPane中显示了一个大的JTree(许多节点)。我想允许最后一个树节点显示在JScrollPane的顶部。Swing在默认情况下似乎不允许这样做,它显示了(完全扩展的)JTree,最后一个节点位于JScrollPane的底部。JScrollBar拇指正在触摸其轨迹的底部 我正在使用JViewport.setViewPosition()方法将树节点的左上位置设置为JViewport中的左上位置,但如果这会导致它在JTree底部显示“空白”,它将拒绝这样做滚动JTree,使最后一行位于Java中JScrollPane的顶部,java,swing,scroll,Java,Swing,Scroll,我在JScrollPane中显示了一个大的JTree(许多节点)。我想允许最后一个树节点显示在JScrollPane的顶部。Swing在默认情况下似乎不允许这样做,它显示了(完全扩展的)JTree,最后一个节点位于JScrollPane的底部。JScrollBar拇指正在触摸其轨迹的底部 我正在使用JViewport.setViewPosition()方法将树节点的左上位置设置为JViewport中的左上位置,但如果这会导致它在JTree底部显示“空白”,它将拒绝这样做 我尝试通过将大小(.se
我尝试通过将大小(.setViewSize设置为其旧值+额外的.getExtentSize()高度)来操作JViewport,但它仍然拒绝允许拇指向下移动,即使它现在不在轨迹底部。我正在调整事件处理程序(.addChangeListener)中的JViewport大小。我想您可以将JTree的首选大小覆盖为默认首选大小加上视口的范围大小减去JTree一行的高度。如果您将JTree放在底部有空白的VBox中,然后用JScrollPane包装VBox?问题是,一旦我设置了JTree首选大小,它就无法通过新的节点扩展/折叠(请参阅
JComponent.getPreferredSize()的源代码)
@Ralph,我想我没有明确说明。我不是说你应该使用setPreferredSize()方法。我的意思是,您可以尝试重写getPreferredSize()方法,首先调用默认实现,然后添加一些额外的高度来考虑视口高度。感谢您的澄清。星期一早上我会试试的。那似乎管用。我扩展了JTree并重写了getPreferredSize以返回super.getPreferredSize()
加上JViewport
范围高度减去行高。