JAVA代码分析

//大二的一个树控件模拟窗口代码
//需要大佬帮我备注一下每一块代码的大概功能和使用了什么控件或是方法,能详细一点的最好。
//也可以私聊讲解,必有重谢。

import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;

public class EditableTreeUpdateforMutilDelete extends JFrame {
    
    private static final long serialVersionUID = -2734697597567545697L;
    private JPanel contentPane;
    private JTree tree;
    
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
        } catch (Throwable e) {
            e.printStackTrace();
        }
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    EditableTreeUpdateforMutilDelete frame = new EditableTreeUpdateforMutilDelete();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    /**
     * Create the frame.
     */
    public EditableTreeUpdateforMutilDelete() {
        addWindowListener(new WindowAdapter() {
            @Override
            public void windowActivated(WindowEvent e) {
                do_this_windowActivated(e);
            }
        });
        setTitle("在树控件中删除节点");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        contentPane.setLayout(new BorderLayout(0, 0));
        setContentPane(contentPane);
        
        JPanel panel = new JPanel();
        contentPane.add(panel, BorderLayout.SOUTH);
        
        JButton button = new JButton("删除节点");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                do_button_actionPerformed(e);
            }
        });
        button.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        panel.add(button);
        
        JScrollPane scrollPane = new JScrollPane();
        contentPane.add(scrollPane, BorderLayout.CENTER);
        
        tree = new JTree();
        tree.setFont(new Font("微软雅黑", Font.PLAIN, 16));
        scrollPane.setViewportView(tree);
    }
    
    protected void do_this_windowActivated(WindowEvent e) {
        DefaultMutableTreeNode root = new DefaultMutableTreeNode("明日科技新书");
        DefaultMutableTreeNode parent1 = new DefaultMutableTreeNode("从入门到精通系列");
        parent1.add(new DefaultMutableTreeNode("《Java从入门到精通(第2版)》"));
        parent1.add(new DefaultMutableTreeNode("《PHP从入门到精通(第2版)》"));
        parent1.add(new DefaultMutableTreeNode("《Visual Basic从入门到精通(第2版)》"));
        parent1.add(new DefaultMutableTreeNode("《Visual C++从入门到精通(第2版)》"));
        root.add(parent1);
        DefaultMutableTreeNode parent2 = new DefaultMutableTreeNode("编程词典系列");
        parent2.add(new DefaultMutableTreeNode("《Java编程词典》"));
        parent2.add(new DefaultMutableTreeNode("《PHP编程词典》"));
        parent2.add(new DefaultMutableTreeNode("《Visual Basic编程词典》"));
        parent2.add(new DefaultMutableTreeNode("《Visual C++编程词典》"));
        root.add(parent2);
        DefaultTreeModel model = new DefaultTreeModel(root);
        tree.setModel(model);
    }
    
    protected void do_button_actionPerformed(ActionEvent e) {
        
        int rc = this.tree.getSelectionCount();
        if (rc != 0) {
            for(int i = 0; i < rc; ++i) {
                DefaultMutableTreeNode selectNode = (DefaultMutableTreeNode)this.tree.getLastSelectedPathComponent();
                if (selectNode.isRoot()) {
                    JOptionPane.showMessageDialog(this, "不能删除根节点!");
                    return;
                }

                DefaultTreeModel model = (DefaultTreeModel)this.tree.getModel();
                model.removeNodeFromParent(selectNode);
            }

            this.tree.repaint();
        } else if (rc == 0) {
            JOptionPane.showMessageDialog(this, "你还没有选择节点的!");
        }
    
    }
}
阅读 1.9k
1 个回答

不要把时间浪费在 awt 或者 swing 上!工作中完全用不到

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进