Java:带有用于展开和折叠的加/减图标的 JTree?

标签 java swing jtree

如何使我的 Jtree 看起来像下面的东西,带有允许展开和折叠的加号和减号图标?

目前,默认的 JTree 仅在您双击时展开和折叠。我想覆盖此双击以获得另一个功能,并让用户通过单击减号和加号图标来展开/折叠树,如下所示。

enter image description here

最佳答案

您必须更改 L&F 的 Tree.collapsedIconTree.expandedIcon 属性并提供您自己的图标:

UIManager.put("Tree.collapsedIcon", new IconUIResource(new NodeIcon('+')));
UIManager.put("Tree.expandedIcon",  new IconUIResource(new NodeIcon('-')));

这是我使用的图标,它是内​​部带有 +/- 的简单正方形:

public class NodeIcon implements Icon {

    private static final int SIZE = 9;

    private char type;

    public NodeIcon(char type) {
        this.type = type;
    }

    public void paintIcon(Component c, Graphics g, int x, int y) {
        g.setColor(UIManager.getColor("Tree.background"));
        g.fillRect(x, y, SIZE - 1, SIZE - 1);

        g.setColor(UIManager.getColor("Tree.hash").darker());
        g.drawRect(x, y, SIZE - 1, SIZE - 1);

        g.setColor(UIManager.getColor("Tree.foreground"));
        g.drawLine(x + 2, y + SIZE / 2, x + SIZE - 3, y + SIZE / 2);
        if (type == '+') {
            g.drawLine(x + SIZE / 2, y + 2, x + SIZE / 2, y + SIZE - 3);
        }
    }

    public int getIconWidth() {
        return SIZE;
    }

    public int getIconHeight() {
        return SIZE;
    }
}

关于Java:带有用于展开和折叠的加/减图标的 JTree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6590462/

相关文章:

更改下一个元素时,ArrayList/List 中的 Java 先前元素被覆盖

java - java中框布局行中的面板居中

java - 设置键绑定(bind)以执行与我的 Action 监听器中相同的 Action

java - 在 JTree 节点中动态调整 JTextField 的大小

java - 将 URL 列表转换为树

java - 转换 Observable onError 并发出一个项目

java - 如何在 J2ME 中获取和设置 JSONObject , JSONArray

java - 调试和检查java核心API?

java - 为什么我不能setText这个jTextField?

java - JTree 文件过滤器和文件夹过滤器