【问题标题】:Add JTree (CheckboxTree) to JDialog将 JTree (CheckboxTree) 添加到 JDialog
【发布时间】:2012-11-26 12:56:52
【问题描述】:

这可能是一个简单的问题,我不太习惯 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();
}

创建复选框树的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:

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

【问题讨论】:

  • “在 JDialog 中使用 JTree 的相同(最简单的)代码可能会做!” 同上,作为您最佳尝试的 SSCCE
  • @AndrewThompson:对不起,我不明白评论...
  • 发布您的最佳尝试的SSCCE(使用标准JTree)。

标签: java swing netbeans jtree jdialog


【解决方案1】:

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

  1. 设计模式中打开您现有的 JDialog
  2. 导航器视图中右键单击[JDialog] 或您的顶级节点(应该是“其他组件”的同级节点)并选择Add From Palette > Beans > Choose Bean
  3. 输入代表您的 JTree 组件的类的完全限定名称(例如com.example.jtree.SomeJTreeComponent)并确认。如果组件是真正的 JTree,它可能会毫无问题地添加。
  4. (可选)此时,树可能会或可能不会包含在 JScrollPane 中。如果不是,您可以通过在新添加的组件上重复第 2 步的部分内容并这次选择 Enclose in 来手动实现此目的。

您将需要手动编写其他内容。我建议您阅读JTree Tutorial 或参考您的 3rd 方组件的文档来帮助您完成它。

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

【讨论】:

  • 非常感谢!做到了! :-)
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 1970-01-01
  • 2017-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
相关资源
最近更新 更多