Java JScrollPanel中未出现多个JTree

Java JScrollPanel中未出现多个JTree,java,swing,jscrollpane,jtree,Java,Swing,Jscrollpane,Jtree,我使用前面提到的第一个示例创建JTree,但我想在JscrollPanel中放置多个树作为根。我只是改变了盒子的布局,用同样的代码创建了一棵树,但是当我运行程序时,树并没有出现在我面前 这是我的密码 import java.awt.*; import javax.swing.*; import javax.swing.tree.*; public class SimpleTree extends JFrame { public static void main(String[] args)

我使用前面提到的第一个示例创建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);
  }
}
import java.awt.*;
导入javax.swing.*;
导入javax.swing.tree.*;
公共类SimpleTree扩展JFrame{
公共静态void main(字符串[]args){
新的SimpleTree();
}
公共SimpleTree(){
超级(“创建一个简单的JTree”);
容器内容=getContentPane();
对象[]层次结构=
{“javax.swing”,
“javax.swing.border”,
“javax.swing.colorchooser”,
“javax.swing.event”,
“javax.swing.filechooser”,
新对象[]{“javax.swing.plaf”,
“javax.swing.plaf.basic”,
“javax.swing.plaf.metal”,
“javax.swing.plaf.multi”},
“javax.swing.table”,
新对象[]{“javax.swing.text”,
新对象[]{“javax.swing.text.html”,
“javax.swing.text.html.parser”},
“javax.swing.text.rtf”},
“javax.swing.tree”,
“javax.swing.undo”};
DefaultMutableTreeNode根=processHierarchy(层次结构);
DefaultMutableTreeNode root2=processHierarchy(层次结构);
JTree树=新的JTree(根);
JTree tree2=新的JTree(root2);
content.setLayout(新的BoxLayout(这个,BoxLayout.Y_轴));
添加(新的JScrollPane(树));
添加(新的JScrollPane(tree2));
设置大小(getPreferredSize());
setVisible(真);
}
/**使节点脱离第一个条目的小例程
*在数组中,然后从后续条目中生成节点
*并使它们成为第一个节点的子节点
*对属于数组的条目递归重复。
*/
私有DefaultMutableTreeNode processHierarchy(对象[]层次结构){
DefaultMutableTreeNode节点=
新的DefaultMutableTreeNode(层次结构[0]);
DefaultMutableTreeNode子级;

对于(int i=1;iA
JScrollPane
在其
视口中具有单个子组件的视图

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

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

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

JScrollPane
在其
视口中具有单个子组件的视图

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

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

content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
  • 必须接受
    JScrollPane
    未指定用于容纳多个
    JComponents

  • 您可以将
    JPanel
    放入
    JScrollPane
    ,将所需数量的
    JTree
    s放入(在
    JScrollPane
    JPanel
    ,也可以将
    GridLayout
    用于
    JPanel

      • 必须接受
        JScrollPane
        未指定用于容纳多个
        JComponents

      • 您可以将
        JPanel
        放入
        JScrollPane
        ,将所需数量的
        JTree
        s放入(在
        JScrollPane
        JPanel
        ,也可以将
        GridLayout
        用于
        JPanel


      非常感谢。看起来我的代码正在创建两个不同的滚动面板,是否有任何方法可以在一个滚动面板中添加两棵树。非常感谢。看起来我的代码正在创建两个不同的滚动面板,是否有任何方法可以在一个滚动面板中添加两棵树。