1 *
2  * To change this template, choose Tools | Templates
3  * and open the template in the editor.
4  */
5
6 /*
7 * MainWindow.java
8 *
9 * Created on 2009-10-17, 21:21:36
10 */
11
12 package package1;
13
14 /**
15 *
16 * @author Administrator
17 */
18 import java.awt.*;
19 import javax.swing.*;
20 import javax.swing.tree.*;
21 import javax.swing.event.*;
22 import java.io.*;
23 import java.util.*;
24 public class MainWindow extends javax.swing.JFrame {
25
26 /** Creates new form MainWindow */
27 public MainWindow() {
28 FileExplporer fileExplorer=new FileExplporer();
29 this.add(fileExplorer) ;
30 initComponents();
31
32 }
33 public class FileExplporer extends JPanel implements TreeSelectionListener {
34
35 JTree tree;
36 public FileExplporer(){
37 try{
38 jbInit();
39 }
40 catch(Exception e){
41 e.printStackTrace();
42 }
43 }
44 private void jbInit() throws Exception{
45
46 this.setSize(200,500);
47 this.setLayout(new BorderLayout());
48 initTree("我的电脑");
49
50 JScrollPane jScrollPane1=new JScrollPane();
51 jScrollPane1.getViewport().add(tree,null);
52 this.add(jScrollPane1,BorderLayout.CENTER);
53 this.setVisible(true);
54 }
55 void initTree(String dir){
56 FileTreeNode root=(FileTreeNode)buildTree(dir);
57 FileTreeNode parent1=(FileTreeNode)buildTree("c:\\");
58 FileTreeNode parent2=(FileTreeNode)buildTree("d:\\");
59 root.add(parent1);
60 root.add(parent2);
61 DefaultTreeModel treeModel=new DefaultTreeModel(root);
62 tree=new JTree(treeModel);
63 MyTreeExpansionListener listener =new MyTreeExpansionListener(tree,root,treeModel,this);
64 tree.addTreeExpansionListener(listener);
65 tree.addTreeSelectionListener(this);
66 }
67 public TreeNode buildTree(String dir){
68 FileTreeNode root=new FileTreeNode(new File(dir));
69 root.readTree(false);
70 return (TreeNode)root;
71 }
72
73
74 public void valueChanged(TreeSelectionEvent e) {
75 Object path[]=e.getPath().getPath();
76 String s=path[0].toString();
77 for(int i=1;i<path.length;i++){
78 s+="\\"+path[i].toString();
79 jTextField1.setText(s);
80 System.out.println("haha");
81
82 }
83 }
84 class MyTreeExpansionListener implements TreeExpansionListener{
85 FileTreeNode root;
86 JTree jtree;
87 DefaultTreeModel treeNodel;
88 JPanel prame;
89 public MyTreeExpansionListener(JTree tree,FileTreeNode node,DefaultTreeModel tmodel,JPanel thePanel){
90 root=node;
91 jtree=tree;
92 treeNodel=tmodel;
93 prame=thePanel;
94 }
95 public void treeExpanded(TreeExpansionEvent event){
96 TreePath path=event.getPath();
97 FileTreeNode node=(FileTreeNode)path.getLastPathComponent();
98 prame.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
99 prame.setEnabled(false);
100 if(node.readTree()){
101 int childrenIdx[]=new int[node.getChildCount()];
102 int i=0;
103 for(Enumeration e=node.children();e.hasMoreElements();){
104 Object obj=e.nextElement();
105 childrenIdx[i]=node.getIndex((TreeNode)obj);
106 i++;
107 }
108 treeNodel.nodesWereInserted(node,childrenIdx);
109 }
110 prame.setEnabled(true);
111 prame.setCursor(Cursor.getDefaultCursor());
112 }
113 public void treeCollapsed(TreeExpansionEvent event){
114
115 }
116 }
117 class FileTreeNode extends DefaultMutableTreeNode{
118 boolean isAdded;
119 public FileTreeNode(File file){
120 super(file);
121 isAdded=false;
122 }
123 public boolean readTree(){
124 return readTree(false);
125 }
126 public boolean readTree(boolean b){
127 if(isAdded)
128 return false;
129 String list[]=getFileObject().list();
130 if(list!=null){
131 for(int i=0;i<list.length;i++){
132 FileTreeNode subnode=new FileTreeNode(new File(getFileObject(),list[i]));
133 add(subnode);
134 if(b){
135 subnode.readTree(b);
136 }
137 }
138 }
139 isAdded=true;
140 return true;
141 }
142 public File getFileObject(){
143 return (File)getUserObject();
144 }
145 @Override
146 public String toString(){
147 File file=getFileObject();
148 return file.getName().length()>0?file.getName():file.getPath();
149 }
150 @Override
151 public boolean isLeaf(){
152 return ((File)userObject).isFile();
153 }
154 }
155 }
156
157 /** This method is called from within the constructor to
158 * initialize the form.
159 * WARNING: Do NOT modify this code. The content of this method is
160 * always regenerated by the Form Editor.
161 */
162 @SuppressWarnings("unchecked")
163 // <editor-fold defaultstate="collapsed" desc="Generated Code">
164 private void initComponents() {
165
166 jTextField1 = new javax.swing.JTextField();
167 jLabel1 = new javax.swing.JLabel();
168 jMenuBar1 = new javax.swing.JMenuBar();
169 jMenu1 = new javax.swing.JMenu();
170 jMenu2 = new javax.swing.JMenu();
171 jMenu3 = new javax.swing.JMenu();
172
173 setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
174
175 jTextField1.addActionListener(new java.awt.event.ActionListener() {
176 public void actionPerformed(java.awt.event.ActionEvent evt) {
177 jTextField1ActionPerformed(evt);
178 }
179 });
180
181 jLabel1.setText("文件路径");
182
183 jMenu1.setText("文件");
184 jMenu1.setFont(new java.awt.Font("宋体", 0, 18));
185 jMenuBar1.add(jMenu1);
186
187 jMenu2.setText("编辑");
188 jMenu2.setFont(new java.awt.Font("宋体", 0, 18));
189 jMenuBar1.add(jMenu2);
190
191 jMenu3.setText("帮助");
192 jMenu3.setFont(new java.awt.Font("宋体", 0, 18));
193 jMenuBar1.add(jMenu3);
194
195 setJMenuBar(jMenuBar1);
196
197 org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
198 getContentPane().setLayout(layout);
199 layout.setHorizontalGroup(
200 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
201 .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
202 .addContainerGap(251, Short.MAX_VALUE)
203 .add(jLabel1)
204 .add(36, 36, 36)
205 .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 472, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
206 );
207 layout.setVerticalGroup(
208 layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
209 .add(layout.createSequentialGroup()
210 .add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.BASELINE)
211 .add(jTextField1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
212 .add(jLabel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, 18, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE))
213 .addContainerGap(491, Short.MAX_VALUE))
214 );
215
216 pack();
217 }// </editor-fold>
218
219 private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
220 // TODO add your handling code here:
221 }
222
223 /**
224 * @param args the command line arguments
225 */
226 public static void main(String args[]) {
227 java.awt.EventQueue.invokeLater(new Runnable() {
228 public void run() {
229 new MainWindow().setVisible(true);
230
231 }
232 });
233 }
234
235 // Variables declaration - do not modify
236 private javax.swing.JLabel jLabel1;
237 private javax.swing.JMenu jMenu1;
238 private javax.swing.JMenu jMenu2;
239 private javax.swing.JMenu jMenu3;
240 private javax.swing.JMenuBar jMenuBar1;
241 private javax.swing.JTextField jTextField1;
242 // End of variables declaration
243
244 }
245

 

 

这是一个建立文件目录树的java应用程序,它所包含的有JTree类及其子类,包含容器类及其继承的子类,包括实现节点的展开和选择监听器。

posted on 2010-03-19 14:40  KuSiuloong  阅读(2437)  评论(0编辑  收藏  举报