Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中如何从JTree中删除每个节点前面的文件夹符号_Java_Swing_Jtree - Fatal编程技术网

在java中如何从JTree中删除每个节点前面的文件夹符号

在java中如何从JTree中删除每个节点前面的文件夹符号,java,swing,jtree,Java,Swing,Jtree,我正在尝试从JTree的节点中删除默认的文件夹符号。 我如何才能做到这一点?Swing教程专门讨论了如何做到这一点: 您可以轻松更改默认图标 用于叶、扩展的枝或 折叠的分支节点。要做到这一点,你必须 首先创建一个 DefaultTreeCellRenderer 以下是一个完整的示例,仅供参考: import java.awt.Component; import java.awt.EventQueue; import java.awt.Graphics; import javax.swing.I

我正在尝试从JTree的节点中删除默认的文件夹符号。
我如何才能做到这一点?

Swing教程专门讨论了如何做到这一点:

您可以轻松更改默认图标 用于叶、扩展的枝或 折叠的分支节点。要做到这一点,你必须 首先创建一个 DefaultTreeCellRenderer


以下是一个完整的示例,仅供参考:

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);
    }
}
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;
                }
            });

这是一个例子;保留大小,但不要绘制任何东西。在代码中发布一些解释,不要只留下一个片段!
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;
                }
            });