以下是一个关于JTree构建模型的例子,代码贴出来如下: package day18_JTree; import java.awt. * ; import java.awt.event. * ; import javax.swing. * ; import javax.swing.tree. * ; class TreeEditFrame extends JFrame implements ActionListener { private static final long serialVersionUID = 1L ; private DefaultTreeModel model; private JTree tree; private JButton addSiblingButton; private JButton addChildButton; private JButton deleteButton; public TreeEditFrame() { setTitle( " TreeEditTest " ); setSize( 300 , 200 ); this .pack(); this .setSize( 500 , 200 ); Toolkit tool = Toolkit.getDefaultToolkit(); double width = tool.getScreenSize().getWidth(); double height = tool.getScreenSize().getHeight(); this .setLocation((( int )(width - this .getWidth())) / 2 ,( int )(height - this .getHeight()) / 2 ); this .setVisible( true ); this .setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); TreeNode root = makeSampleTree(); model = new DefaultTreeModel(root); tree = new JTree(model); DefaultTreeCellRenderer renderer = new DefaultTreeCellRenderer(); renderer.setLeafIcon( new ImageIcon( " 1.gif " )); renderer.setClosedIcon( new ImageIcon( " 2.gif " )); renderer.setOpenIcon( new ImageIcon( " 3.gif " )); // renderer.setBackgroundNonSelectionColor(Color.BLUE); // renderer.setBackgroundSelectionColor(Color.RED); renderer.setBorderSelectionColor(Color.RED); tree.setCellRenderer(renderer); Container contentPane = getContentPane(); JScrollPane scrollPane = new JScrollPane(tree); contentPane.add(scrollPane, " Center " ); JPanel panel = new JPanel(); addSiblingButton = new JButton( " Add Sibling " ); addSiblingButton.addActionListener( this ); panel.add(addSiblingButton); addChildButton = new JButton( " Add Child " ); addChildButton.addActionListener( this ); panel.add(addChildButton); deleteButton = new JButton( " Delete " ); deleteButton.addActionListener( this ); panel.add(deleteButton); contentPane.add(panel, " South " ); } public TreeNode makeSampleTree() { DefaultMutableTreeNode root = new DefaultMutableTreeNode( " World " ); DefaultMutableTreeNode country = new DefaultMutableTreeNode( " USA " ); root.add(country); DefaultMutableTreeNode state = new DefaultMutableTreeNode( " California " ); country.add(state); DefaultMutableTreeNode city = new DefaultMutableTreeNode( " San Jose " ); state.add(city); city = new DefaultMutableTreeNode( " Cupertino " ); state.add(city); state = new DefaultMutableTreeNode( " Michigan " ); country.add(state); city = new DefaultMutableTreeNode( " Ann Arbor " ); state.add(city); country = new DefaultMutableTreeNode( " Germany " ); root.add(country); state = new DefaultMutableTreeNode( " Schleswig-Holstein " ); country.add(state); city = new DefaultMutableTreeNode( " Kiel " ); state.add(city); return root; } public void actionPerformed(ActionEvent event) { DefaultMutableTreeNode selectedNode = (DefaultMutableTreeNode) tree .getLastSelectedPathComponent(); if (selectedNode == null ) return ; if (event.getSource().equals(deleteButton)) { if (selectedNode.getParent() != null ) model.removeNodeFromParent(selectedNode); return ; } DefaultMutableTreeNode newNode = new DefaultMutableTreeNode( " New " ); if (event.getSource().equals(addSiblingButton)) { DefaultMutableTreeNode parent = (DefaultMutableTreeNode) selectedNode .getParent(); if (parent != null ) { int selectedIndex = parent.getIndex(selectedNode); model.insertNodeInto(newNode, parent, selectedIndex + 1 ); } } else if (event.getSource().equals(addChildButton)) { model.insertNodeInto(newNode, selectedNode, selectedNode .getChildCount()); } TreeNode[] nodes = model.getPathToRoot(newNode); TreePath path = new TreePath(nodes); tree.scrollPathToVisible(path); } } public class TreeEditTest { public static void main(String[] args) { JFrame frame = new TreeEditFrame(); frame.show(); } } 截图: