问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

初学java,如何把JTree组件添加到界面中?

发布网友 发布时间:2023-10-14 13:47

我来回答

3个回答

热心网友 时间:2024-11-23 12:15


/**
 * 把代码复制到文件,可以运行。
 */
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Transparency;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JDialog;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.TreeCellRenderer;

/**
 *
 * @author beans
 */
public class TreeMain {

    public static void main(String[] args) {
        new TreeMain().showDialog();
    }

    public TreeMain() {
    }

    /**
     * 显示窗口
     */
    private void showDialog() {
        JDialog dialog = new JDialog();

        dialog.setBounds(new Rectangle(50, 50, 380, 280));
        dialog.setTitle("演示树");

        dialog.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                dialog.setVisible(false);
                dialog.dispose();
            }
        });

        dialog.add(this.getPanel(), BorderLayout.CENTER);
        dialog.setVisible(true);
    }

    private JPanel getPanel() {
        JPanel panel = new JPanel();
        JScrollPane treePanel = new JScrollPane();
        treePanel.setViewportView(this.getTree());
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(panel);
        panel.setLayout(layout);
        layout.setHorizontalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(treePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                        .addContainerGap())
        );
        layout.setVerticalGroup(
                layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(treePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 272, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(18, Short.MAX_VALUE))
        );
        panel.add(treePanel, BorderLayout.CENTER);
        return panel;
    }

    /**
     * 取得树。
     *
     * @return
     */
    private JTree getTree() {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode();
        root.add(this.getNode());
        root.add(this.getNode());
        root.add(this.getNode());
        JTree jtree = new JTree(root);
        jtree.setRootVisible(false);
        jtree.setCellRenderer(new CTreeCellRenderer());
        jtree.expandRow(1);
        return jtree;
    }

    /**
     * 取得树节点。
     *
     * @return
     */
    private DefaultMutableTreeNode getNode() {
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(new NodeObject(true, "节"));
        for (int i = 0; i < 5; i++) {
            DefaultMutableTreeNode leaf = new DefaultMutableTreeNode(new NodeObject(false, "叶" + i));
            node.add(leaf);
        }
        return node;
    }

    /**
     * 树节点和树叶,关联对象。
     */
    class NodeObject {

        boolean isNode;
        String name;

        /**
         *
         * @param isNode the value of isNode
         * @param name the value of name
         */
        NodeObject(boolean isNode, String name) {
            this.isNode = isNode;
            this.name = name;
        }

        /**
         * 图标
         *
         * @param isSelect 选中节点时返回不同的图标。
         * @return
         */
        ImageIcon getIcon(boolean isSelect) {
            int wh = 20;
            BufferedImage image = new BufferedImage(wh, wh, BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = image.createGraphics();

            image = g2.getDeviceConfiguration().createCompatibleImage(wh, wh, Transparency.TRANSLUCENT);
            Graphics2D g2d = image.createGraphics();
            Font font = new Font("Dialog", Font.PLAIN, wh - 4);
            g2d.setFont(font);
            g2d.setBackground(Color.WHITE);
            g2d.setColor(Color.BLACK);
            g2d.drawString(isSelect ? " S " : " N ", 0, wh - 1);
            g2d.setColor(this.isNode ? Color.RED : Color.YELLOW);
            g2d.drawLine(0, 5, wh, 5);
            g2d.drawLine(0, 10, wh, 10);
            g2d.drawLine(0, 15, wh, 15);

            g2d.dispose();
            g2.dispose();
            return new ImageIcon(image);
        }

        String getName() {
            return this.name;
        }
    }

    /**
     * 树渲染器
     */
    protected class CTreeCellRenderer extends JLabel implements TreeCellRenderer {

        protected Color m_textSelectionColor;
        protected Color m_textNonSelectionColor;
        protected Color m_bkSelectionColor;
        protected Color m_bkNonSelectionColor;
        protected Color m_borderSelectionColor;
        protected boolean m_selected;

        public CTreeCellRenderer() {
            m_textSelectionColor = UIManager.getColor("Tree.selectionForeground");
            m_textNonSelectionColor = UIManager.getColor("Tree.textForeground");
            m_bkSelectionColor = UIManager.getColor("Tree.selectionBackground");
            m_bkNonSelectionColor = UIManager.getColor("Tree.textBackground");
            m_borderSelectionColor = UIManager.getColor("Tree.selectionBorderColor");
        }

        @Override
        public Component getTreeCellRendererComponent(JTree tree, Object value,
                boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
            DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
            NodeObject obj = (NodeObject) node.getUserObject();
            this.setIcon(obj.getIcon(selected));
            this.setText("  " + obj.getName() + " ");
            this.setForeground(selected ? m_textSelectionColor : m_textNonSelectionColor);
            this.setBackground(selected ? m_bkSelectionColor : m_bkNonSelectionColor);
            this.m_selected = selected;
            return this;
        }

        @Override
        public void paint(Graphics g) {
            Color bColor = this.getBackground();
            Icon icon = this.getIcon();

            g.setColor(bColor);
            int offset = 0;
            if (icon != null && getText() != null) {
                offset = (icon.getIconWidth() + this.getIconTextGap());
            }
            g.fillRect(offset, 0, this.getWidth() - 1 - offset, this.getHeight() - 1);

            if (this.m_selected) {
                g.setColor(this.m_borderSelectionColor);
                g.drawRect(offset, 0, this.getWidth() - 1 - offset, this.getHeight() - 1);
            }
            super.paint(g);
        }
    }

}

热心网友 时间:2024-11-23 12:15

public PicsTree() {
    // ...
    
    final JTree tree = new JTree(top);
    
    // 添加 JTree
    this.add(tree);
}

将 JTree 添加至 PicsTree 

追问按照你的改了,并且GUI上加了getContentPane就可以了,谢谢啦

热心网友 时间:2024-11-23 12:15

public PicsTree() {
// ...

final JTree tree = new JTree(top);

// 添加 JTree
this.add(tree);
}

将 JTree 添加至 PicsTree
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
人大政协辅助岗是什么 政务辅助人员是干什么 政府辅助人员是什么 努比亚的海拔什么意思 北非努比亚现在怎么样了啊 相邻权的相关法律 梦见老公离世了什么预兆 梦见自己老公走掉 你出轨后 怎么操作才没被发现? 评评怎么造句 《草原》一课,老翁祝酒时可能说什么35 第一课,草原,干部向我们敬酒,老翁向我们敬酒,我们回敬。干部...37 老翁敬酒时可能会说什么55 去商丘人才交流中心存档案,需要身份证吗? 干部向我们敬酒,70岁的老翁向我们敬酒,我们回敬413 什么牙膏防蛀牙最有效80 把档案从商丘人才中心调出需要本人办理吗?4 怎样和自私自利的同事相处 口罩生产行业排名前五的公司有哪些? 生产口罩的品牌知名度比较高的公司有哪些,求推荐! ...有60张邮票,最少要加上多少张才可以平均分给九位小朋友,这道题该... 文明礼仪手抄报的内容?11133 oppo手机可以同时登陆两个吗 高中各科有哪些好的学习方法,有什么注意事项?6 栋梁之才是什么意思5 清单计价和定额计价有什么区别与联系751 量子是什么?与质子,原子什么关系77 国考中如何巧解行测数量关系题之利润问题? 求 java 刷新 JScrollPane中jtree树状图... 如何使用晕车药3 地震来时如果在室外如何紧急自救27 地震时室外怎样避险和自救11 地震时如何自救270 在不同地方地震要如何自救8 去商丘人才交流中心存档案,需要身份证吗? 甚情难缺怎么解释 在地震中,如何让被困者自救??10 想知道: 商丘市 从火车站到商丘市人才交流中心怎么坐公交4 在地震时,我们怎样自救?9 用C#导入Excel2007的表格,两台电脑安装的都是200... 怎么样可以申请一个新的? 栋梁之才什么意思3 栋梁之材是什么意思?4 生产口罩的品牌知名度比较高的公司有哪些,求介绍! 公务员考试.怎样快速计算经济利润问题1 QQ上聊天很多人都发“额”字,请问那是指什么意思? 居住证转上海户口 中的中级职称包括哪些内容18 什么叫栋梁之才5 老师培养国家栋梁之才,栋梁之才是什么意思? 口罩品牌十大知名企业的排名哪里能看到1