5

我想在 JTree 中的项目右侧添加一个带有小图标的附加按钮。可以这样做吗?如果是这样,如何?

谢谢!

4

4 回答 4

5

夹钳,

你在这方面取得了成功吗?我想做同样的事情,但很难让 JButton 响应用户。设置渲染器以使按钮显示很顺利,但是所有鼠标事件都由 JTree 本身处理,而不是传递给我的按钮。

我终于找到了一个解决方案,并认为我会在这里发布它供其他人评论(也许有更好的方法?)

除了我的自定义渲染器之外,我还创建了一个扩展 DefaultTreeCellEditor 的自定义编辑器。我的自定义渲染器通过构造函数传递到自定义编辑器。在编辑器中,我覆盖 isCellEditable 以返回 true,并覆盖 getTreeCellEditorComponent 以返回 renderer.getTreeCellRendererComponent。这是关键。它返回渲染器组件,因此所有点击都传递到我的自定义渲染器中的面板,然后我的 JButton 正常响应操作事件。

这是我的编辑器:

public class MyTreeCellEditor extends DefaultTreeCellEditor  {



    public MyTreeCellEditor(JTree tree, DefaultTreeCellRenderer renderer) {
        super(tree, renderer);
    }

    public Component getTreeCellEditorComponent(JTree tree, Object value,
            boolean isSelected, boolean expanded, boolean leaf, int row) {
        return renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true);
    }

    public boolean isCellEditable(EventObject anEvent) {
        return true; // Or make this conditional depending on the node
    }
}

在你的树上,一定要设置你的自定义编辑器:

myTree.setCellEditor(new MyTreeCellEditor(myTree, (DefaultTreeCellRenderer) myTree.getCellRenderer()));
于 2010-09-22T12:24:36.900 回答
3

您将需要实现 TreeCellRenderer 的 CustomCellRenderer,并将其附加到 JTree。

在您的 CustomCellRenderer 中,您可以放置​​按钮和图标。

JTree tree = new JTree(rootVector);
TreeCellRenderer renderer = new CustomCellRenderer();
tree.setCellRenderer(renderer);

检查这个例子:(从这里引用上面的代码)

http://www.java2s.com/Code/Java/Swing-JFC/TreeCellRenderer.htm

于 2010-08-18T08:57:08.743 回答
1

您可以将 TreeCellRenderer 添加到您的 JTree。这个渲染器可以在树的每个元素上渲染一个图标。

于 2010-08-18T08:52:30.743 回答
1

来自 JTree Javadoc:

要使用 JTree 显示复合节点(例如,包含图形图标和文本的节点),子类化javax.swing.tree.TreeCellRenderer并使用setCellRenderer来告诉树使用它。

复合节点就是您想要的。您必须实现一个方法,该方法将返回一个Composite对象,在您的情况下,该对象位于一个包含按钮和标签的小面板中。

于 2010-08-18T08:55:56.650 回答