Когда добавляешь в невидимый рут - ничего не увидишь, так как он закрыт. Нужно либо его раскрыть либо вызвать метод scrollPathToVisible у дерева ...
к примеру вот так:
| Код | import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.tree.*;
public class JDynamicTreePanel extends JPanel { private int newNodeSuffix = 1;
private DefaultMutableTreeNode rootNode; private DefaultTreeModel treeModel; private JTree tree;
public JDynamicTreePanel() { super(new BorderLayout()); JPanel treePanel = new JPanel(new GridLayout(1,0));
rootNode = new DefaultMutableTreeNode("Root Node"); treeModel = new DefaultTreeModel(rootNode); tree = new JTree(treeModel); tree.setRootVisible( false );
JScrollPane scrollPane = new JScrollPane(tree); treePanel.add(scrollPane);
JButton addButton = new JButton("Add"); addButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent e) { String newChildName = "New Node " + newNodeSuffix++; DefaultMutableTreeNode parentNode = null; TreePath parentPath = tree.getSelectionPath();
if (parentPath == null) { parentNode = rootNode; } else { parentNode = (DefaultMutableTreeNode)(parentPath.getLastPathComponent()); }
DefaultMutableTreeNode childNode = new DefaultMutableTreeNode(newChildName); treeModel.insertNodeInto(childNode, parentNode, parentNode.getChildCount()); tree.scrollPathToVisible(new TreePath(childNode.getPath())); } });
treePanel.setPreferredSize(new Dimension(300, 150)); add(treePanel, BorderLayout.CENTER);
JPanel panel = new JPanel(new GridLayout(0,1)); panel.add(addButton); add(panel, BorderLayout.LINE_END); }
public static void main(String[] args) { JFrame frame = new JFrame("DynamicTreeDemo"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JDynamicTreePanel newContentPane = new JDynamicTreePanel(); newContentPane.setOpaque(true); frame.setContentPane(newContentPane); frame.pack(); frame.show(); } }
| |