import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
public class Test extends JFrame {
JTree tree = new JTree();
DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
TreeSelectionModel selectionModel = tree.getSelectionModel();JButton removeButton = new JButton("Remove selected node");
JButton addButton = new JButton("Add node");public Test() {
Container contentPane = getContentPane();selectionModel.setSelectionMode(
TreeSelectionModel.SINGLE_TREE_SELECTION);contentPane.add(new ControlPanel(), BorderLayout.NORTH);
contentPane.add(tree, BorderLayout.CENTER);tree.addTreeSelectionListener(
new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreePath path = e.getNewLeadSelectionPath();
boolean nodesAreSelected = (path != null);addButton.setEnabled(nodesAreSelected);
removeButton.setEnabled(nodesAreSelected);
}
});
model.addTreeModelListener(new TreeModelListener() {
public void treeNodesInserted(TreeModelEvent e) {
showInsertionOrRemoval(e, " added to ");
}
public void treeNodesRemoved(TreeModelEvent e) {
showInsertionOrRemoval(e, " removed from ");
}
private void showInsertionOrRemoval(TreeModelEvent e,
String s) {
Object[] parentPath = e.getPath();
int[] indexes = e.getChildIndices();
Object[] children = e.getChildren();
Object parent = parentPath[parentPath.length-1];JOptionPane.showMessageDialog(Test.this,
  "Node \"" + children[0].toString() +
  "\"" + s + parent.toString() +
  " at index " + indexes[0],
  "Node Added or Removed",
  JOptionPane.INFORMATION_MESSAGE);
}
public void treeNodesChanged(TreeModelEvent e) {}
public void treeStructureChanged(TreeModelEvent e) {}
});
}
class ControlPanel extends JPanel {
public ControlPanel() {
addButton.setEnabled(false);
removeButton.setEnabled(false);add(addButton);
add(removeButton);addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath path =
selectionModel.getSelectionPath();MutableTreeNode parent, node =
(MutableTreeNode)path.getLastPathComponent();if(path.getPathCount() > 1)
parent = (MutableTreeNode)node.getParent();
else
parent = (MutableTreeNode)node;int index = parent.getIndex(node) + 1;String s = JOptionPane.showInputDialog(
Test.this,
   "Enter a name for the new node:",
"New Tree Node",
JOptionPane.QUESTION_MESSAGE);MutableTreeNode newNode =
new DefaultMutableTreeNode(s);model.insertNodeInto(newNode, parent, index);
}
});
removeButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
TreePath path =
selectionModel.getSelectionPath();if(path.getPathCount() == 1) {
JOptionPane.showMessageDialog(ControlPanel.this,
"Can't remove root node!");
return;
}MutableTreeNode node =
(MutableTreeNode)path.getLastPathComponent();model.removeNodeFromParent(node);
}
});
}
}
public static void main(String args[]) {
Test t = new Test();
t.setSize(400,300);
t.show();
}
}
谁再能加个编辑树接点的功能,谢谢

解决方案 »

  1.   

    有没有tree.setModel()把改变后的TreeModel设置为JTree的Model.
    我也是新手只是刚在JTable上遇到相识的问题,当时是没有保存我编辑的数据.
      

  2.   

    第一,放到数据库中,每次进来初始化
    第二,放到一个xml文件中,按照你的结构生成同样结构的xml文件,每次进来初始化
    这样就可以保存的。
      

  3.   

    能否说的具体点,我真的很希望知道答案,我就保存在.txt文件里,以后是可以该的拉
      

  4.   

    把树写进XML文档中,下次启动时加载就可以了