Java JTree未显示在SplitPane的左滚动窗格中
我正在尝试实现一个两边都有滚动窗格的拆分窗格。左侧应该显示一个我正在尝试实现的JTree,但它不工作,我无法看到该树 我不确定我做错了什么。我的代码大致如下:Java JTree未显示在SplitPane的左滚动窗格中,java,swing,jscrollpane,jtree,splitpane,Java,Swing,Jscrollpane,Jtree,Splitpane,我正在尝试实现一个两边都有滚动窗格的拆分窗格。左侧应该显示一个我正在尝试实现的JTree,但它不工作,我无法看到该树 我不确定我做错了什么。我的代码大致如下: public class SplitPane extends JFrame { DefaultTreeModel treeModel; JEditorPane editorPane = new JEditorPane(); DefaultMutableTreeNode Root; JTree tree;
public class SplitPane extends JFrame {
DefaultTreeModel treeModel;
JEditorPane editorPane = new JEditorPane();
DefaultMutableTreeNode Root;
JTree tree;
JScrollPane leftscrollPane;
JScrollPane rightscrollPane;
public SplitPane() {
setSize(600,400);
tree = new JTree(Root);
Root = new DefaultMutableTreeNode("");
setTree(); // I connect all the nodes here
treeModel = new DefaultTreeModel(Root);
tree = new JTree(Root);
tree.setRootVisible(false);
leftscrollPane = new JScrollPane(tree);
rightscrollPane = new JScrollPane(editorPane);
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(leftscrollPane);
splitPane.setRightComponent(rightscrollPane);
splitPane.setDividerLocation(160);
setVisible(true);
splitPane.setPreferredSize(new Dimension(600,400));
getContentPane().add(splitPane);
}
}
然后要初始化,我只需执行SplitPane newpane=newsplitpane()代码>
我想我已经正确地添加了所有节点,因为当我这样做时
Enumeration e = Root.preorderEnumeration();
while(e.hasMoreElements()) {
System.out.println(e.nextElement());
}
我看到所有节点都按顺序排列
我做错了什么?我真的非常感谢您的帮助和反馈 你的第二个
tree = new JTree(Root);
必须使用模型初始化:
tree = new JTree(treeModel);
您可以删除树的第一次初始化,因为它被第二次初始化覆盖
下面是一个运行示例:
public class SplitPane extends JFrame {
private MutableTreeNode createTree() {
DefaultMutableTreeNode root = new DefaultMutableTreeNode("root");
root.add(new DefaultMutableTreeNode("child 1"));
root.add(new DefaultMutableTreeNode("child 2"));
return root;
}
public SplitPane() {
setSize(600, 400);
// create model and add nodes
TreeModel model = new DefaultTreeModel(createTree());
// initialize tree, set the model
JTree tree = new JTree(model);
tree.setRootVisible(false);
JScrollPane leftScrollPane = new JScrollPane(tree);
JScrollPane rightScrollPane = new JScrollPane(new JLabel("Text ..."));
JSplitPane splitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
splitPane.setLeftComponent(leftScrollPane);
splitPane.setRightComponent(rightScrollPane);
splitPane.setDividerLocation(200);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.getContentPane().add(splitPane);
this.setVisible(true);
}
}
您只需将其实例化到如下位置即可运行此示例:
SplitPane splitPane = new SplitPane();
首先移动setVisible(true)
作为您执行的最后一个命令,请确保Root
实际上包含所有子项。您可以通过使tree.setRootVisible(false)进行快速测试
tree.setRootVisible(true)
您应该添加setTree()代码>方法。感谢您的反馈!这成功了!非常感谢你。我显然不太明白树模型的重要性!