gpt4 book ai didi

java - 防止在 JTree 中的节点扩展时选择节点

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:25 24 4
gpt4 key购买 nike

我创建了一个 JTree,它的一些节点是自定义的,以将它们显示为可扩展的,尽管它们还没有任何子节点。我关注了this thread实现这一点。

为什么?我想动态加载树,以便在树展开时,我从服务器检索更多信息并将其显示在树上。

我遇到的问题是,当我展开其中一个节点时,它会被选中,这不是默认节点的默认行为(您可以在不更改树选择的情况下展开它们)。

如何解决这个问题以防止该节点在扩展时被选中?

最佳答案

我在下面的代码中没有遇到这个问题。您一定在做其他事情,我们在没有看到您的代码的情况下无法猜测。尝试使用下面的代码并对其进行修改以重现您所看到的问题。通过这样做,您很有可能会发现自己的做法有所不同,以及为什么会出现这种行为(另请参见 SSCCE)。

代码取自here

import java.awt.BorderLayout;
import java.awt.Container;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeNode;

public class DynamicTree extends JFrame {

public class OutlineNode extends DefaultMutableTreeNode {
private boolean areChildrenDefined = false;
private int outlineNum;
private int numChildren;

public OutlineNode(int outlineNum, int numChildren) {
this.outlineNum = outlineNum;
this.numChildren = numChildren;
}

@Override
public boolean isLeaf() {
return false;
}

@Override
public int getChildCount() {
if (!areChildrenDefined) {
defineChildNodes();
}
return super.getChildCount();
}

private void defineChildNodes() {
// You must set the flag before defining children if you
// use "add" for the new children. Otherwise you get an infinite
// recursive loop, since add results in a call to getChildCount.
// However, you could use "insert" in such a case.
areChildrenDefined = true;
for (int i = 0; i < numChildren; i++) {
add(new OutlineNode(i + 1, numChildren));
}
}

@Override
public String toString() {
TreeNode parent = getParent();
if (parent == null) {
return String.valueOf(outlineNum);
} else {
return parent.toString() + "." + outlineNum;
}
}
}

public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
new DynamicTree(5);
}
});
}

public DynamicTree(int n) {
super("Creating a Dynamic JTree");
setDefaultCloseOperation(EXIT_ON_CLOSE);
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedLookAndFeelException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Container content = getContentPane();
JTree tree = new JTree(new OutlineNode(1, n));
content.add(new JScrollPane(tree), BorderLayout.CENTER);
setSize(300, 475);
setVisible(true);
}
}

关于java - 防止在 JTree 中的节点扩展时选择节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10529325/

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