有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在节点删除时调用java Swing JTree addTreeSelectionListener

我对荡秋千还不熟悉,如果这是一种预期的行为,我很抱歉

我有一个DeleteAll按钮,它删除所有JTree节点。很好用

但我想知道,如果我选择一个节点,然后单击DeleteAll按钮,为什么会调用“addTreeSelectionListener”

请建议如何避免这种情况

    import java.awt.*;
    import java.awt.event.ActionEvent;
    import javax.swing.*;
    import javax.swing.tree.DefaultMutableTreeNode;
    import javax.swing.tree.DefaultTreeModel;
    import javax.swing.tree.TreePath;

    public class JTreeDemo {
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                public void run() {
                    JFrame frame = new JTreeFrame();
                    frame.setTitle("JTree Demo");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setVisible(true);
                }
            });
        }
    }

    class JTreeFrame extends JFrame {
        public JTreeFrame() {
            setSize(300, 300);

            DefaultMutableTreeNode country = new DefaultMutableTreeNode("Animal");

            DefaultMutableTreeNode state = new DefaultMutableTreeNode("Tiger");
            country.add(state);

            JButton deleteAll = new JButton("DeleteAll");
            JTree tree = new JTree(country);

            deleteAll.addActionListener(new AbstractAction() {
                    @Override
                    public void actionPerformed(ActionEvent ae) {

                        System.out.println("Delete started...");

                        DefaultTreeModel ttmodel = (DefaultTreeModel) tree.getModel();
                        //ttmodel.setRoot(null);
                        DefaultMutableTreeNode troot = (DefaultMutableTreeNode) ttmodel.getRoot();
                        troot.removeAllChildren();
                        ttmodel.reload();
                    }
                }
            );

            tree.addTreeSelectionListener(e -> {
                TreePath path = e.getPath();
                System.out.println(path);
            });

            JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT,
                    deleteAll, new JScrollPane(tree));

            add(new JScrollPane(splitPane));
        }
     }

共 (0) 个答案