将JTree(CheckboxTree)添加到JDialog

时间:2012-11-26 12:56:53

标签: java swing netbeans jtree jdialog

这可能是一个简单的问题,我不太习惯Java编程。但我需要创建一个包含CheckboxTree的对话框(JTree的变体带复选框,请参阅http://www.javaworld.com/javaworld/jw-09-2007/jw-09-checkboxtree.html

请注意:我在NetBeans的图形环境中创建了JDialog,因此它生成了添加按钮等的代码。所以我需要知道如何在创建主要部分后添加此树,可以这么说......也许这就是问题,因为如果我这样做的话:

   JPanel panel = new JPanel();
   this.setContentPane(panel);

然后我实际上看到对话框中显示的树,但所有按钮和所有按钮都消失了......

我已将它添加到JFrame和选项窗格中,但我希望它在自定义JDialog中。有谁能用非常简单的语言向我解释我需要做什么?

到目前为止,这是我的微弱尝试:

JDialog的构造函数:

public MetadataUI(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();

    Container panel = getContentPane();
    panel.add(getTree());
    panel.repaint();
    this.pack();
}

创建checkboxtree的getTree方法:

private static CheckboxTree getTree() {
    DefaultMutableTreeNode root, child;

    root = new DefaultMutableTreeNode("root");

    child = new DefaultMutableTreeNode("Colors");
    root.add(child);
    child.add(new DefaultMutableTreeNode("Cyan"));
    child.add(new DefaultMutableTreeNode("Magenta"));
    child.add(new DefaultMutableTreeNode("Yellow"));
    child.add(new DefaultMutableTreeNode("Black"));


    CheckboxTree checkboxTree = new CheckboxTree(root);
    checkboxTree.setVisible(true);
    return checkboxTree;
}

这种重新粉刷,所有这一切都是基于我发现谷歌搜索的最后一次尝试,但它没有任何区别,所以我猜我已经走了。

添加树并使其可见的最简单方法将不胜感激。它似乎与添加它的JTree完全相同,但我不能使它工作。因此,即使没有人使用这个特定的checkboxtree插件,在JTree中使用JDialog的相同(最简单)代码也可能会这样做!

编辑:

对安德鲁的回应,对于常规的JTree,这是同样的事情(我最好的尝试):

private static JTree getTree() {
    DefaultMutableTreeNode root, child;

    root = new DefaultMutableTreeNode("root");

    child = new DefaultMutableTreeNode("Colors");
    root.add(child);
    child.add(new DefaultMutableTreeNode("Cyan"));
    child.add(new DefaultMutableTreeNode("Magenta"));
    child.add(new DefaultMutableTreeNode("Yellow"));
    child.add(new DefaultMutableTreeNode("Black"));


    JTree tree = new JTree(root);
    tree.setVisible(true);
    return tree;
}

编辑2:

对Maxim的回应,我很困惑。对你来说显而易见的事情可能在我身上丢失了。借用代码中的一些东西,这是我能想到的最好的东西(不起作用):

public MetadataUI(java.awt.Frame parent, boolean modal) {
    super(parent, modal);
    initComponents();


    JScrollPane s = new JScrollPane();

    s.getViewport().add(getTree());

    getContentPane().add(s, BorderLayout.CENTER);

    setVisible(true);
}

1 个答案:

答案 0 :(得分:1)

如果您确实使用Netbeans GUI(它是JDialog表单)创建了JDialog,并且您尝试集成到已有的组件中,则提供零参数构造函数,请尝试以下操作:

  1. 设计模式
  2. 中打开现有的JDialog
  3. 导航器视图中,右键单击[JDialog]或您的顶级节点(应该是“其他组件”的兄弟)并选择Add From Palette > Beans > Choose Bean
  4. 输入代表您的JTree组件的类的完全限定名称(例如com.example.jtree.SomeJTreeComponent)并确认。如果组件完全是一个JTree,它可能会毫无问题地添加。
  5. (可选)此时,树可能包含也可能不包含在JScrollPane中。如果不是,您可以通过在新添加的组件上重复步骤2的部分并在此次选择Enclose in来手动实现此目的。
  6. 您需要手动编程其他内容。我建议你阅读JTree Tutorial或参考第三方组件的文档来帮助你完成它。

    您可能还想了解有关用于构建GUI的tool的更多信息。