gpt4 book ai didi

java - 插入新节点时在 JTree 末尾设置视口(viewport)

转载 作者:行者123 更新时间:2023-12-01 22:40:54 25 4
gpt4 key购买 nike

我有一个位于 JScrollPane 中的 JTree。我想更新视口(viewport)并将其设置为插入新节点时 JTree 的末尾。

我想做类似的事情...

   scrollPane = new JScrollPane( textPane ));
scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

DefaultCaret caret = (DefaultCaret) textPane.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

但使用 JTree 而不是 JTextPane。 JTree 类没有 getCaret() 方法,因此我检查了 JTree API,但找不到我需要的东西。有没有简单的方法可以让它工作?

最佳答案

您可以获得 JViewport 滚动 Pane 的,然后使用 JViewPort#scrollRectToVisible(Rectangle contentRect) 。类似的东西

int y = tree.getPreferredSize().height;
pane.getViewport().scrollRectToVisible(new Rectangle(0, y, 0, 0));

这是一个完整的示例

import java.awt.Rectangle;
import javax.swing.*;
import javax.swing.tree.DefaultMutableTreeNode;

public class TestViewPort {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable(){
public void run() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
for (int i = 0; i < 100; i++) {
root.add(new DefaultMutableTreeNode(Integer.toString(i)));
}
JTree tree = new JTree(root);
tree.setVisibleRowCount(10);
JScrollPane pane = new JScrollPane();
pane.setViewportView(tree);
int y = tree.getPreferredSize().height;
pane.getViewport().scrollRectToVisible(new Rectangle(0, y, 0, 0));
JOptionPane.showMessageDialog(null, pane);
}
});
}
}
<小时/>
  • 或者就像 AndrewThompson 指出的那样 tree.scrollRectToVisible(new Rectangle(0, y, 0, 0)); ,如JTree也有这个方法。
<小时/>

更新:可能是最好的解决方案

关于java - 插入新节点时在 JTree 末尾设置视口(viewport),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26159481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com