【发布时间】:2014-06-01 16:13:29
【问题描述】:
一般来说,我不希望自动选择折叠的节点。相反,我希望它的子节点在之前被选中时保持选中状态。
在下面的 SSCCE 中展开“水果”,然后选择“香蕉”。现在通过单击“Fruits”节点图标左侧的折叠图标来折叠“Fruits”。 “Fruits”节点折叠,现在也被选中。
我希望“香蕉”节点在“水果”节点折叠后也保持选中状态。我怎样才能做到这一点?
谢谢!
SSCCE:
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.SwingUtilities;
import javax.swing.tree.DefaultMutableTreeNode;
public class TreeExample extends JFrame
{
private final JTree tree;
public TreeExample()
{
//create the root node
final DefaultMutableTreeNode root = new DefaultMutableTreeNode("Root");
//create the child nodes
final DefaultMutableTreeNode vegetableNode = new DefaultMutableTreeNode("Vegetables");
final DefaultMutableTreeNode fruitNode = new DefaultMutableTreeNode("Fruits");
final DefaultMutableTreeNode aNode = new DefaultMutableTreeNode("apple");
final DefaultMutableTreeNode bNode = new DefaultMutableTreeNode("banana");
final DefaultMutableTreeNode cNode = new DefaultMutableTreeNode("coconut");
final DefaultMutableTreeNode dNode = new DefaultMutableTreeNode("date");
fruitNode.add(aNode);
fruitNode.add(bNode);
fruitNode.add(cNode);
fruitNode.add(dNode);
//add the child nodes to the root node
root.add(vegetableNode);
root.add(fruitNode);
//create the tree by passing in the root node
this.tree = new JTree(root);
this.add(this.tree);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setTitle("JTree Example");
this.pack();
this.setVisible(true);
}
public static void main(final String[] args)
{
SwingUtilities.invokeLater(new Runnable()
{
@Override
public void run()
{
new TreeExample();
}
});
}
}
【问题讨论】:
-
afaik,只能选择可见节点——这是在 ui 委托中处理的,所以改变的机会不大。如果您真的想要它,您可能必须保留自己的单独 selectionModel 并根据需要更新另一个
-
我认为对于 SINGLE_TREE_SELECTION,您可以从触发展开/折叠的鼠标事件中丢失选择
-
@mKorbel 我的母语不是英语,但你的句子似乎漏掉了什么。
标签: java swing jtree collapse selected