?? treedemo6.java
字號:
/*我們再來看一個TreeModelEvent的例子,下面這個例子我們可以讓用戶自行增加、
*刪除與修改節點:
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
public class TreeDemo6 implements ActionListener,TreeModelListener{
JLabel label=null;
JTree tree=null;
DefaultTreeModel treeModel=null;
String nodeName=null;//原有節點名稱
public TreeDemo6(){
// this line needs to be implemented in order to make JWS work properly
UIManager.getLookAndFeelDefaults().put("ClassLoader", getClass().getClassLoader());
JFrame f=new JFrame("TreeDemo6");
Container contentPane=f.getContentPane();
DefaultMutableTreeNode root=new DefaultMutableTreeNode("資源管理器");
tree=new JTree(root);
tree.setEditable(true);
tree.addMouseListener(new MouseHandle());
treeModel=(DefaultTreeModel)tree.getModel();
treeModel.addTreeModelListener(this);
JScrollPane scrollPane=new JScrollPane();
scrollPane.setViewportView(tree);
JPanel panel=new JPanel();
JButton b=new JButton("新增節點");
b.addActionListener(this);
panel.add(b);
b=new JButton("刪除節點");
b.addActionListener(this);
panel.add(b);
b=new JButton("清除所有節點");
b.addActionListener(this);
panel.add(b);
label=new JLabel("Action");
contentPane.add(panel,BorderLayout.NORTH);
contentPane.add(scrollPane,BorderLayout.CENTER);
contentPane.add(label,BorderLayout.SOUTH);
f.pack();
f.setVisible(true);
f.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
}
//本方法運行新增、刪除、清除所有節點的程序代碼.
public void actionPerformed(ActionEvent ae){
if (ae.getActionCommand().equals("新增節點")){
DefaultMutableTreeNode parentNode=null;
DefaultMutableTreeNode newNode=new DefaultMutableTreeNode("新節點");
newNode.setAllowsChildren(true);
TreePath parentPath=tree.getSelectionPath();
//取得新節點的父節點
parentNode=(DefaultMutableTreeNode)(parentPath.getLastPathComponent());
System.out.println("parentNode為:"+parentNode);
//由DefaultTreeModel的insertNodeInto()方法增加新節點
treeModel.insertNodeInto(newNode,parentNode,parentNode.getChildCount());
//tree的scrollPathToVisible()方法在使Tree會自動展開文件夾以便顯示所加入的新節點。若沒加這行則加入的新節點
//會被 包在文件夾中,你必須自行展開文件夾才看得到。
tree.scrollPathToVisible(new TreePath(newNode.getPath()));
label.setText("新增節點成功");
}
if (ae.getActionCommand().equals("刪除節點")){
TreePath treepath=tree.getSelectionPath();
if (treepath!=null){
//下面兩行取得選取節點的父節點.
DefaultMutableTreeNode selectionNode=(DefaultMutableTreeNode)treepath.getLastPathComponent();
TreeNode parent=(TreeNode)selectionNode.getParent();
if (parent!=null) {
//由DefaultTreeModel的removeNodeFromParent()方法刪除節點,包含它的子節點。
treeModel.removeNodeFromParent(selectionNode);
label.setText("刪除節點成功");
}
else {System.out.println("欲刪節點為根節點!");}
}
else {System.out.println("未選中節點!");}
}
if (ae.getActionCommand().equals("清除所有節點")){
//下面一行,由DefaultTreeModel的getRoot()方法取得根節點.
DefaultMutableTreeNode rootNode=(DefaultMutableTreeNode)treeModel.getRoot();
//下面一行刪除所有子節點.
rootNode.removeAllChildren();
System.out.println(rootNode.getUserObject());
rootNode.setUserObject("");
//刪除完后務必運行DefaultTreeModel的reload()操作,整個Tree的節點才會真正被刪除.
treeModel.reload();
label.setText("清除所有節點成功");
}
}
public void treeNodesChanged(TreeModelEvent e){
TreePath treePath=e.getTreePath();
DefaultMutableTreeNode node=(DefaultMutableTreeNode)treePath.getLastPathComponent();
try{
int[] index=e.getChildIndices();
node=(DefaultMutableTreeNode)node.getChildAt(index[0]);
}catch(NullPointerException exc){}
label.setText(nodeName+"更改數據為:"+(String)node.getUserObject());
}
public void treeNodesInserted(TreeModelEvent e){
System.out.println("new node insered");
}
public void treeNodesRemoved(TreeModelEvent e){
System.out.println("node deleted");
}
public void treeStructureChanged(TreeModelEvent e){
System.out.println("Structrue changed");
}
public static void main(String[] args){
new TreeDemo6();
}
class MouseHandle extends MouseAdapter{
public void mousePressed(MouseEvent e){
try{
JTree tree=(JTree)e.getSource();
int rowLocation=tree.getRowForLocation(e.getX(),e.getY());
TreePath treepath=tree.getPathForRow(rowLocation);
TreeNode treenode=(TreeNode)treepath.getLastPathComponent();
nodeName=treenode.toString();
}catch(NullPointerException ne){}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -