【问题标题】:JTree not showing up inside left ScrollPane of SplitPaneJTree 未显示在 SplitPane 的左侧 ScrollPane 内
【发布时间】:2018-11-28 02:39:24
【问题描述】:

我正在尝试实现一个两边都有滚动窗格的拆分窗格。左侧应显示我正在尝试实现的 JTree,但它不工作并且我看不到树。

我不确定我做错了什么。我的代码是这样的:

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 = new SplitPane();

我认为我已经正确添加了所有节点,因为当我这样做时

Enumeration e = Root.preorderEnumeration();
while(e.hasMoreElements()) {
    System.out.println(e.nextElement());
}

我按顺序查看所有节点。

我做错了什么?非常感谢一些帮助和反馈!

【问题讨论】:

  • 首先将setVisible(true); 移动为您执行的最后一个命令
  • 确保Root 实际上包含任何子项。您可以通过 tree.setRootVisible(false); tree.setRootVisible(true); 进行快速测试
  • 你应该添加你的setTree();方法。
  • 感谢您的反馈!

标签: java swing jscrollpane jtree splitpane


【解决方案1】:

你的第二个

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();

【讨论】:

  • 这成功了!太感谢了。我显然不太了解树模型的重要性!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-02
  • 2015-07-18
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多