将JTree(CheckboxTree)添加到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和optionspane中,但我希望它在自定义JDialog中。有人能简单地向我解释一下我需要做什么吗?

以下是我迄今为止的微弱尝试:

JDialog的构造函数:

public MetadataUI(java.awt.Frame parent, boolean modal) {
super(parent, modal);
initComponents();
Container panel = getContentPane();
panel.add(getTree());
panel.repaint();
this.pack();
}

创建复选框树的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插件的经验,在JDialog中使用相同(最简单)的JTree代码也可能做到!

编辑:

作为对Andrew的回应,以下是对常规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:

作为对马克西姆的回应,我感到困惑。对你来说显而易见的东西可能在我身上消失了。从你的代码中借用一些东西,这是我能想到的最好的(不起作用):

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

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

  1. 设计模式下打开现有的JDialog
  2. Navigator视图中右键单击[JDialog]或任何顶级节点(应该是"其他组件"的同级节点),然后选择Add From Palette > Beans > Choose Bean
  3. 为表示JTree组件(例如com.example.jtree.SomeJTreeComponent)的类输入一个完全限定的名称,然后确认。如果组件实际上是一个JTree,那么添加它可能不会有任何问题
  4. (可选)此时,树可能被封闭在JScrollPane中,也可能不被封闭在其中。如果不是,则可以通过重复步骤2的部分内容手动实现。在您新添加的组件上,并选择Enclose in

您需要手动编程其他内容。我建议你阅读JTree教程或参考第三方组件的文档来帮助你完成它

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

最新更新