这可能是一个简单的问题,我不太习惯 Java 编程。但我需要创建一个带有 CheckboxTree 的对话框(带有复选框的变体JTree
,请参阅http://www.javaworld.com/javaworld/jw-09-2007/jw-09-checkboxtree.html)
请注意:我已经在JDialog
NetBeans 的图形环境中创建了,所以它已经生成了添加按钮等的代码。所以我需要知道在创建主要部分之后如何添加这棵树,可以这么说......也许就是这样问题,因为如果我这样做:
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();
}
创建复选框树的 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 插件,在 a 中使用 a 的相同(最简单的)代码JTree
也JDialog
可能会做!
编辑:
作为对 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:
作为对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);
}