package package2;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
/*
* 树的练习,默认节点DefaultMutableTreeNode
* */
public class Tree_practice extends JFrame {
Container container;
JTree tree;
JScrollPane scrollpane;
public Tree_practice() {
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.container = this.getContentPane();
DefaultMutableTreeNode root = new DefaultMutableTreeNode("C:\\");
DefaultMutableTreeNode col1 = new DefaultMutableTreeNode("Docs");
DefaultMutableTreeNode col2 = new DefaultMutableTreeNode("Rename");
root.add(col1);
root.add(col2);
DefaultMutableTreeNode col21 = new DefaultMutableTreeNode("API");
DefaultMutableTreeNode col22 = new DefaultMutableTreeNode("Index.hlml",
false);
col1.add(col21);
col1.add(col22);
DefaultMutableTreeNode col31 = new DefaultMutableTreeNode(
"swing.tree.*");
col21.add(col31);
DefaultMutableTreeNode col41 = new DefaultMutableTreeNode(
"JCompnent.html", false);
DefaultMutableTreeNode col42 = new DefaultMutableTreeNode(
"JButton.hlml", false);
DefaultMutableTreeNode col43 = new DefaultMutableTreeNode(
"JLabel.hlml", false);
col31.add(col43);
col31.add(col42);
col31.add(col41);
tree = new JTree(root);
scrollpane = new JScrollPane(tree);
this.container.add(scrollpane);
this.setLocation(300, 100);
this.setSize(600, 600);
this.setVisible(true);
}
}
class TTreeCellRenderer{
public TTreeCellRenderer(){
Tree_practice t=new Tree_practice();
// t.tree.putClientProperty("JTree.lineStyle", "Angled");
// t.tree.putClientProperty("JTree.lineStyle", "None");
DefaultTreeCellRenderer render=
(DefaultTreeCellRenderer)t.tree.getCellRenderer();//设置显示样式
t.tree.setRowHeight(40);
render.setDoubleBuffered(true);
render.setLeafIcon(new ImageIcon("7.png"));//叶子图标
render.setOpenIcon(new ImageIcon("10.png"));//节点打开图标
render.setClosedIcon(new ImageIcon("9.png"));//节点关闭图标
render.setFont(new Font(
"Monospaced",Font.BOLD|Font.ITALIC,15));
render.setTextNonSelectionColor(Color.black);//未选中时字体颜色
render.setTextSelectionColor(Color.red);//选中时字体颜色
render.setBorderSelectionColor(Color.blue);//选中时边界颜色
t.invalidate();
}
}
/*
* 定制树模型显示文件系统层次结构的JTree
*/
class TTreeModel extends JFrame {
public TTreeModel() {
super("TTreeModel");
FileSystemModel fs = new FileSystemModel();
JTree tree = new JTree(fs);
JScrollPane scroll = new JScrollPane(tree);
this.getContentPane().add(scroll);
this.setSize(600, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class FileSystemModel implements TreeModel, TreeModelListener {
private String root;
private Vector listeners;
public FileSystemModel() {
// this.root=System.getProperty("user.home");
// if(System.getProperty("os.name").equals("Windows 95")){
// File tempFile=new File(root);
// root=tempFile.getParent();
// }
this.root = "D:\\";
this.listeners = new Vector();
}
@Override
public Object getRoot() {
return (new File(root));
}
@Override
public Object getChild(Object parent, int index) {
File directory = (File) parent;
String[] dirMembers = directory.list();
return (new File(directory, dirMembers[index]));
}
@Override
public int getChildCount(Object parent) {
File file = (File) parent;
if (file.isDirectory()) {
String[] dirMembers = file.list();
if (dirMembers == null)
return 0;
return dirMembers.length;
} else
return 0;
}
@Override
public boolean isLeaf(Object node) {
return ((File) node).isFile();
}
@Override
public void valueForPathChanged(TreePath path, Object newValue) {
// TODO Auto-generated method stub
}
@Override
public int getIndexOfChild(Object parent, Object child) {
File directory = (File) parent;
String[] dirMembers = directory.list();
File fchild = (File) child;
for (int j = 0; j < dirMembers.length; j++)
if (fchild.getName().equals(dirMembers[j]))
return j;
return -1;
}
@Override
public void addTreeModelListener(TreeModelListener l) {
if (l != null && !this.listeners.contains(l)) {
this.listeners.add(l);
}
}
@Override
public void removeTreeModelListener(TreeModelListener l) {
if (l != null) {
this.listeners.removeElement(l);
}
}
@Override
public void treeNodesChanged(TreeModelEvent e) {
// TODO Auto-generated method stub
}
@Override
public void treeNodesInserted(TreeModelEvent e) {
Enumeration listenerCount = this.listeners.elements();
while (listenerCount.hasMoreElements()) {
TreeModelListener listener = (TreeModelListener) listenerCount
.nextElement();
listener.treeNodesInserted(e);
}
}
@Override
public void treeNodesRemoved(TreeModelEvent e) {
// TODO Auto-generated method stub
}
@Override
public void treeStructureChanged(TreeModelEvent e) {
// TODO Auto-generated method stub
}
}
//树选择事件处理
class TTreeSelectionEvent extends JFrame {
Container container;
DefaultMutableTreeNode root;
JScrollPane treePane;
JScrollPane editorPane;
JEditorPane editor;
TTreeSelectionEvent temp=this;
public TTreeSelectionEvent() {
super("TTreeSelectionEvent");
this.container = this.getContentPane();
this.CreateTreeNodes();
JTree tree = new JTree(root);
// tree.getSelectionModel().setSelectionMode(
// TreeSelectionModel.SINGLE_TREE_SELECTION);
tree.addTreeSelectionListener(new TreeSelectionListener() {
private void DoSingleSelection(TreeSelectionEvent e){
JTree tree = (JTree) e.getSource();
DefaultMutableTreeNode select = (DefaultMutableTreeNode) tree
.getLastSelectedPathComponent();
TreePath[]tp=tree.getSelectionPaths();
if (select.isLeaf()) {
TreePath path = e.getPath();
Object[] nodes = path.getPath();
String s = "";
for (int j = 0; j < nodes.length; j++)
s += ((DefaultMutableTreeNode) nodes[j]).toString()
+ "\\\\";
editor.setEditable(true);
s = s.substring(0, s.length() - 2);
editor.setText(s);
editor.addFocusListener(new FocusListener() {
String file;
@Override
public void focusGained(FocusEvent e) {
file = editor.getText();
}
@Override
public void focusLost(FocusEvent e) {
try {
if(file==null)
return;
File f=new File(file);
f.createNewFile();
FileWriter fw = new FileWriter(file);
fw.write(editor.getText());
fw.close();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
}
@Override
public void valueChanged(TreeSelectionEvent e) {
JTree tree = (JTree) e.getSource();
TreeSelectionModel ts=tree.getSelectionModel();
if(ts.getSelectionMode()==TreeSelectionModel.SINGLE_TREE_SELECTION){//单选
this.DoSingleSelection(e);
}else if(ts.getSelectionMode()==TreeSelectionModel.CONTIGUOUS_TREE_SELECTION){//连续选
}else{//多选
TreePath[]tp=tree.getSelectionPaths();
if(tp==null)
return;
temp.editor.addFocusListener(null);
temp.editor.setEditable(false);
String path="All Path:\n";
for(int j=0;j<tp.length;j++)
path+=tp[j].toString()+"\n";
temp.editor.setText(path);
}
}
});
this.treePane = new JScrollPane(tree);
this.editor = new JEditorPane();
this.editorPane = new JScrollPane(this.editor);
JSplitPane splitpane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
true, this.treePane, this.editorPane);
this.container.add(splitpane);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600, 600);
this.setVisible(true);
}
private void CreateTreeNodes() {
this.root = new DefaultMutableTreeNode("D:");
DefaultMutableTreeNode col1 = new DefaultMutableTreeNode("data");
DefaultMutableTreeNode col2 = new DefaultMutableTreeNode("swing");
root.add(col1);
root.add(col2);
DefaultMutableTreeNode col11 = new DefaultMutableTreeNode("first.txt");
DefaultMutableTreeNode col12 = new DefaultMutableTreeNode("second.txt");
col1.add(col11);
col1.add(col12);
}
}
最近需要使用swing编点东西,特意学了一下JTree的使用,具体代码如下: