Как удалить символ папки, который появляется перед каждым узлом из JTree в Java - PullRequest
4 голосов
/ 10 марта 2011

Я пытаюсь удалить символ папки из узла JTree, который поставляется по умолчанию. Как мне это сделать?

Ответы [ 3 ]

9 голосов
/ 10 марта 2011

Просто для справки, вот полный пример:

import java.awt.Component;
import java.awt.EventQueue;
import java.awt.Graphics;
import javax.swing.Icon;
import javax.swing.JFrame;
import javax.swing.JTree;
import javax.swing.UIManager;

/** @see http://stackoverflow.com/questions/5260223 */
public class JTreeLite {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            //@Override
            public void run() {
                createGUI();
            }
        });
    }

    private static void createGUI() {
        final JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Icon empty = new TreeIcon();
        UIManager.put("Tree.closedIcon", empty);
        UIManager.put("Tree.openIcon", empty);
        UIManager.put("Tree.collapsedIcon", empty);
        UIManager.put("Tree.expandedIcon", empty);
        UIManager.put("Tree.leafIcon", empty);

        JTree jt = new JTree();
        frame.add(jt);
        frame.pack();
        frame.setSize(300, 400);
        frame.setVisible(true);
    }
}

class TreeIcon implements Icon {

    private static int SIZE = 0;

    public TreeIcon() {
    }

    public int getIconWidth() {
        return SIZE;
    }

    public int getIconHeight() {
        return SIZE;
    }

    public void paintIcon(Component c, Graphics g, int x, int y) {
        System.out.println(c.getWidth() + " " + c.getHeight() + " " + x + " " + y);
    }
}
2 голосов
/ 29 марта 2017
DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) jTree.getCellRenderer();
    renderer.setLeafIcon(null);
    renderer.setClosedIcon(null);
    renderer.setOpenIcon(null);

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

tree.setCellRenderer(new DefaultTreeCellRenderer() {
                @Override
                public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row, boolean hasFocus) {
                    JLabel component = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
                    ImageIcon iconPath = ((WizardNode) value).getIcon();
                    component.setIcon(iconPath);
                    return this;
                }
            });
2 голосов
/ 10 марта 2011

В руководстве Swing рассказывается конкретно о том, как это сделать:

http://download.oracle.com/javase/tutorial/uiswing/components/tree.html#display

Вы можете легко изменить значок по умолчанию используется для листа, расширенной ветви или свернутые узлы ветвей. Для этого вы сначала создайте экземпляр DefaultTreeCellRenderer.

...