Java: JTree с иконками плюс / минус для расширения и свертывания? - PullRequest
1 голос
/ 06 июля 2011

Как мне сделать, чтобы мой Jtree выглядел примерно так, как показано ниже, с иконками плюс и минус, которые позволяют разворачиваться и сворачиваться?

В настоящее время JTree по умолчанию расширяется и сворачивается только при двойном щелчке.Я хочу переопределить этот двойной щелчок для другой функциональности и позволить пользователю развернуть / свернуть дерево, нажимая только значки минус и плюс, как показано ниже.

enter image description here

Ответы [ 3 ]

10 голосов
/ 02 ноября 2011

Вы должны изменить свойства Tree.collapsedIcon и Tree.expandedIcon L & F и предоставить свои собственные значки:

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;
    }
}
4 голосов
/ 06 июля 2011

со значками плюс и минус, что позволяет разворачиваться и разворачиваться?

Это значки по умолчанию для Windows LAF. Другие LAF имеют разные значки.

Вы можете установить свои собственные значки с помощью UIManager. См. UIManager по умолчанию .

Или вы можете использовать пользовательские значки только для одного JTree. См. Настройка отображения дерева .

позволяет пользователю развернуть / свернуть дерево, щелкнув только значки минус и плюс, как показано ниже.

Это поведение по умолчанию.

0 голосов
/ 15 апреля 2013

Или просто подумайте:)

class SourceListTreeUI extends BasicTreeUI
{

    int offset = 10;

    protected int getRowX(int row, int depth)
    {
        return totalChildIndent * (depth + offset);
    }
}
...