因为配置文件有时候必须让用户修改,所以提供一个可视化的编辑配置文件的格式,是一个软件具有良好的用户可交互性的体现。我们必须给XML文档找到一个可视化的方法。Java语言中的Swing组件里面的JTree,用于XML文档的可视化是非常适合的。这两者之间存在着很方便的转换方法。这就意味着我们能将用户在JTree上面的操作,在存盘后方便地表现为在XML文件中的修改,也能将XML文件方便地表现为一棵JTree展现给用户。 
         现在JTree的编辑问题解决不了,谁帮忙发个例子???

解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import javax.swing.tree.*;public class TreeEditTest
    {  public static void main(String[] args)
       {  JFrame frame = new TreeEditFrame();
          frame.show();
       }
    }class TreeEditFrame extends JFrame
       implements ActionListener
    {  public TreeEditFrame()
       {  setTitle("TreeEditTest");
          setSize(300, 200);
          addWindowListener(new WindowAdapter()
             {  public void windowClosing(WindowEvent e)
                {  System.exit(0);
                }
             } );      // construct tree      TreeNode root = makeSampleTree();
          model = new DefaultTreeModel(root);
          tree = new JTree(model);      // add scroll pane with tree to content pane      Container contentPane = getContentPane();
          JScrollPane scrollPane = new JScrollPane(tree);
          contentPane.add(scrollPane, "Center");      // make button panel      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);
                //model.removeFromParent(selectedNode);
             return;
          }      // add new node as sibling or child      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());
          }      // now display new node      TreeNode[] nodes = model.getPathToRoot(newNode);
          TreePath path = new TreePath(nodes);
          tree.scrollPathToVisible(path);
       }   private DefaultTreeModel model;
       private JTree tree;
       private JButton addSiblingButton;
       private JButton addChildButton;
       private JButton deleteButton;
       private JButton editButton;
    }
    tree.setEditable(true);这个函数就是使JTree能编辑