【问题标题】:Multiple JTree is not appearing in JScrollPanel多个 JSTree 未出现在 JScrollPane 中
【发布时间】:2012-11-29 19:22:41
【问题描述】:

我正在使用提到的第一个示例here 创建我的 JTree,但我想在 JscrollPanel 中放置多个树作为根。我只是更改了框的布局并使用相同的代码再创建一棵树,但是当我运行程序时,树并没有出现在我面前。

这是我的代码

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

public class SimpleTree extends JFrame {
  public static void main(String[] args) {
    new SimpleTree();
  }

  public SimpleTree() {
    super("Creating a Simple JTree");
    Container content = getContentPane();
    Object[] hierarchy =
      { "javax.swing",
        "javax.swing.border",
        "javax.swing.colorchooser",
        "javax.swing.event",
        "javax.swing.filechooser",
        new Object[] { "javax.swing.plaf",
                       "javax.swing.plaf.basic",
                       "javax.swing.plaf.metal",
                       "javax.swing.plaf.multi" },
        "javax.swing.table",
        new Object[] { "javax.swing.text",
                       new Object[] { "javax.swing.text.html",
                                      "javax.swing.text.html.parser" },
                       "javax.swing.text.rtf" },
        "javax.swing.tree",
        "javax.swing.undo" };
    DefaultMutableTreeNode root = processHierarchy(hierarchy);
    DefaultMutableTreeNode root2 = processHierarchy(hierarchy);
    JTree tree = new JTree(root);
    JTree tree2 = new JTree(root2);
    content.setLayout(new BoxLayout(this,BoxLayout.Y_AXIS));
    content.add(new JScrollPane(tree));
    content.add(new JScrollPane(tree2));
    setSize(getPreferredSize());
    setVisible(true);
  }

  /** Small routine that will make node out of the first entry
   *  in the array, then make nodes out of subsequent entries
   *  and make them child nodes of the first one. The process is
   *  repeated recursively for entries that are arrays.
   */

  private DefaultMutableTreeNode processHierarchy(Object[] hierarchy) {
    DefaultMutableTreeNode node =
      new DefaultMutableTreeNode(hierarchy[0]);
    DefaultMutableTreeNode child;
    for(int i=1; i<hierarchy.length; i++) {
      Object nodeSpecifier = hierarchy[i];
      if (nodeSpecifier instanceof Object[])  // Ie node with children
        child = processHierarchy((Object[])nodeSpecifier);
      else
        child = new DefaultMutableTreeNode(nodeSpecifier); // Ie Leaf
      node.add(child);
    }
    return(node);
  }
}

有人可以帮我解决这个问题吗?非常感谢所有帮助。

谢谢 Ashish Tyagi

【问题讨论】:

    标签: java swing jscrollpane jtree


    【解决方案1】:

    JScrollPane 在其ViewPort 中有一个单个 子组件的视图。

    但是,您可以将 2 个 JScrollPane 组件放置在一个面板上,例如均匀拆分 GridLayout(2, 1),并将 JScrollPane 的视图设置为新面板。

    旁白:您应该使用ContentPane 作为BoxLayout 的容器:

    content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
    

    【讨论】:

    • 非常感谢。看起来我的代码正在创建两个不同的滚动面板,有什么办法可以在一个滚动面板中添加两个树。
    【解决方案2】:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多