Я новичок в качелях, извините, если это ожидаемое поведение.
У меня есть кнопка DeleteAll, которая удаляет все узлы JTree. Работает нормально.
Но мне интересно, почему вызывается 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));
}
}