【问题标题】:Scroll a JTree so that last line is at top of JScrollPane in Java滚动 JTree 以使最后一行位于 Java 中 JScrollPane 的顶部
【发布时间】:2011-02-19 05:37:12
【问题描述】:

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

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

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

【问题讨论】:

    标签: java swing scroll


    【解决方案1】:

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

    【讨论】:

    • 问题是,一旦我设置了 JTree 首选大小,它就失去了通过新节点扩展/折叠再次计算自己大小的能力(参见 JComponent.getPreferredSize()) 的源代码。
    • @Ralph,我想我不是很明确。我并不是说您应该使用 setPreferredSize() 方法。我的意思是您可以尝试覆盖 getPreferredSize() 方法以首先调用默认实现,然后添加一些额外的高度来考虑视口高度。
    • 感谢您的澄清。我会在星期一早上试试。
    • 这似乎行得通。我扩展了 JTree 并覆盖了 getPreferredSize 以返回 super.getPreferredSize() 加上 JViewport 范围高度减去 rowHeight。
    【解决方案2】:

    如果你把你的 JTree 放在一个底部有空白空间的 VBox 中,然后用 JScrollPane 包裹这个 VBox 呢?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多