java swing:为JTree项添加自定义图形按钮

时间:2010-08-18 08:32:00

标签: java swing jtree

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

谢谢!

4 个答案:

答案 0 :(得分:4)

钳,

你有成功吗?我想做同样的事情并且很难让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()));

答案 1 :(得分:1)

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

答案 2 :(得分:1)

来自JTree Javadoc:

  

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

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

答案 3 :(得分:1)

您将需要实现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