前两个类用来返回一颗目录树,代码可以不管,主类实现在JFrame上显示C盘目录树,但是出来只有前两级目录,大牛帮忙解决~import javax.swing.*;
import java.io.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.*;
import java.util.logging.Level;
import java.util.logging.Logger;class MyNode extends DefaultMutableTreeNode{
private boolean explored = false;
public MyNode(File file){
setUserObject(file);
} public boolean getAllowChildren(){
return isDirectory();
} public boolean isLeaf(){
return !isDirectory();
} public File getFile(){
return (File)getUserObject();
} public boolean isExplored(){
return explored;
} public boolean isDirectory(){
File file = getFile();
return file.isDirectory();
} public String toString(){
File file = getFile();
String filename = file.toString();
int index = filename.lastIndexOf("\\");
return (index!=1&&index!=filename.length()-1)?filename.substring(index+1):filename;
} public String getString(){
File file = getFile();
String filename = file.getAbsolutePath();
return filename;
} public void explore(){
if(!isDirectory()){
return;
}
if(!isExplored()){
File file = getFile();
File child[] = file.listFiles();
for(int i=0;i<child.length;i++){
add(new MyNode(child[i]));
/*if(children[i].isDirectory()){
add(new MyNode(children[i]));
}*/
}
explored = true;
}
}
}
class GetFileTree implements Serializable{
public JTree jtree;
public JTree getTree(File file){
MyNode filenod = new MyNode(file);
filenod.explore();
jtree = new JTree(new DefaultTreeModel(filenod));
jtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jtree.setShowsRootHandles(true);
jtree.addTreeExpansionListener(new TreeExpansionListener(){ public void treeExpanded(TreeExpansionEvent e) {
TreePath treePath = e.getPath();
MyNode node = (MyNode)treePath.getLastPathComponent();
if(!node.isExplored()){
DefaultTreeModel model = (DefaultTreeModel)jtree.getModel();
node.explore();
model.nodeStructureChanged(node);
}
}
public void treeCollapsed(TreeExpansionEvent event) {}
});
return jtree;
}
GetFileTree(){} public GetFileTree(String filename){
jtree = getTree(new File(filename));
}
}
public class Main extends JFrame{
public void writeTree(String f){
GetFileTree tree = new GetFileTree("C:");
FileOutputStream fout = null;
try {
fout = new FileOutputStream(f);
} catch (FileNotFoundException ex) {}
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(fout);
} catch (IOException ex) {}
try {
out.writeObject(tree);
} catch (IOException ex) {}
try {
out.close();
} catch (IOException ex) {}
} public GetFileTree readTree(){
GetFileTree tree = null;
FileInputStream fin=null;
ObjectInputStream in = null;
try {
fin = new FileInputStream("C:/b.ser");
try {
in = new ObjectInputStream(fin);
try {
tree = (GetFileTree) in.readObject();
in.close();
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
return tree;
} Main(){
writeTree("C:/b.ser");
GetFileTree filetree = readTree();
this.add(filetree.jtree);
this.setSize(200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO code application logic here
new Main();
}}
import java.io.*;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.*;
import java.util.logging.Level;
import java.util.logging.Logger;class MyNode extends DefaultMutableTreeNode{
private boolean explored = false;
public MyNode(File file){
setUserObject(file);
} public boolean getAllowChildren(){
return isDirectory();
} public boolean isLeaf(){
return !isDirectory();
} public File getFile(){
return (File)getUserObject();
} public boolean isExplored(){
return explored;
} public boolean isDirectory(){
File file = getFile();
return file.isDirectory();
} public String toString(){
File file = getFile();
String filename = file.toString();
int index = filename.lastIndexOf("\\");
return (index!=1&&index!=filename.length()-1)?filename.substring(index+1):filename;
} public String getString(){
File file = getFile();
String filename = file.getAbsolutePath();
return filename;
} public void explore(){
if(!isDirectory()){
return;
}
if(!isExplored()){
File file = getFile();
File child[] = file.listFiles();
for(int i=0;i<child.length;i++){
add(new MyNode(child[i]));
/*if(children[i].isDirectory()){
add(new MyNode(children[i]));
}*/
}
explored = true;
}
}
}
class GetFileTree implements Serializable{
public JTree jtree;
public JTree getTree(File file){
MyNode filenod = new MyNode(file);
filenod.explore();
jtree = new JTree(new DefaultTreeModel(filenod));
jtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jtree.setShowsRootHandles(true);
jtree.addTreeExpansionListener(new TreeExpansionListener(){ public void treeExpanded(TreeExpansionEvent e) {
TreePath treePath = e.getPath();
MyNode node = (MyNode)treePath.getLastPathComponent();
if(!node.isExplored()){
DefaultTreeModel model = (DefaultTreeModel)jtree.getModel();
node.explore();
model.nodeStructureChanged(node);
}
}
public void treeCollapsed(TreeExpansionEvent event) {}
});
return jtree;
}
GetFileTree(){} public GetFileTree(String filename){
jtree = getTree(new File(filename));
}
}
public class Main extends JFrame{
public void writeTree(String f){
GetFileTree tree = new GetFileTree("C:");
FileOutputStream fout = null;
try {
fout = new FileOutputStream(f);
} catch (FileNotFoundException ex) {}
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(fout);
} catch (IOException ex) {}
try {
out.writeObject(tree);
} catch (IOException ex) {}
try {
out.close();
} catch (IOException ex) {}
} public GetFileTree readTree(){
GetFileTree tree = null;
FileInputStream fin=null;
ObjectInputStream in = null;
try {
fin = new FileInputStream("C:/b.ser");
try {
in = new ObjectInputStream(fin);
try {
tree = (GetFileTree) in.readObject();
in.close();
} catch (ClassNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
return tree;
} Main(){
writeTree("C:/b.ser");
GetFileTree filetree = readTree();
this.add(filetree.jtree);
this.setSize(200, 200);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws FileNotFoundException, IOException {
// TODO code application logic here
new Main();
}}
package testSeri;import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Point;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeExpansionListener;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;
import javax.swing.tree.TreeSelectionModel;class MyNode extends DefaultMutableTreeNode {
private static final long serialVersionUID = -8434141668243898120L; private boolean explored = false; public MyNode(File file) {
setUserObject(file);
} public boolean getAllowChildren() {
return isDirectory();
} public boolean isLeaf() {
return !isDirectory();
} public File getFile() {
return (File) getUserObject();
} public boolean isExplored() {
return explored;
} public boolean isDirectory() {
File file = getFile();
return file.isDirectory();
} public String toString() {
File file = getFile();
String filename = file.toString();
int index = filename.lastIndexOf("\\");
return (index != 1 && index != filename.length() - 1) ? filename.substring(index + 1) : filename;
} public String getString() {
File file = getFile();
String filename = file.getAbsolutePath();
return filename;
} public void explore() {
if (!isDirectory()) {
return;
}
if (!isExplored()) {
File file = getFile();
File child[] = file.listFiles();
if (child != null) {
for (int i = 0; i < child.length; i++) {
add(new MyNode(child[i]));
/*
* if(children[i].isDirectory()){ add(new
* MyNode(children[i])); }
*/
}
}
explored = true;
}
}
}class GetFileTree implements Serializable {
private static final long serialVersionUID = 8170640449283675414L; public JTree jtree; public JTree getTree(File file) {
MyNode filenod = new MyNode(file);
filenod.explore();
jtree = new JTree(new DefaultTreeModel(filenod));
jtree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
jtree.setShowsRootHandles(true);
jtree.addTreeExpansionListener(new TreeExpansionListener() { public void treeExpanded(TreeExpansionEvent e) {
TreePath treePath = e.getPath();
MyNode node = (MyNode) treePath.getLastPathComponent();
if (!node.isExplored()) {
DefaultTreeModel model = (DefaultTreeModel) jtree.getModel();
node.explore();
model.nodeStructureChanged(node);
}
} public void treeCollapsed(TreeExpansionEvent event) {
}
});
return jtree;
} public GetFileTree() {
} public GetFileTree(String filename) {
jtree = getTree(new File(filename));
}
}public class Main extends JFrame {
private static final long serialVersionUID = 8175264375113141915L; public void writeTree(String f) {
GetFileTree tree = new GetFileTree("C:\\3\\");
FileOutputStream fout = null;
ObjectOutputStream out = null;
try {
fout = new FileOutputStream(f);
out = new ObjectOutputStream(fout);
out.writeObject(tree);
out.flush();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
try {
out.close();
fout.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
} public GetFileTree readTree() {
FileInputStream fin = null;
ObjectInputStream in = null;
try {
fin = new FileInputStream("C:/b.ser");
in = new ObjectInputStream(fin);
final GetFileTree tree = (GetFileTree) in.readObject();
tree.jtree.addTreeExpansionListener(new TreeExpansionListener() { public void treeExpanded(TreeExpansionEvent e) {
TreePath treePath = e.getPath();
MyNode node = (MyNode) treePath.getLastPathComponent();
if (!node.isExplored()) {
DefaultTreeModel model = (DefaultTreeModel) tree.jtree.getModel();
node.explore();
model.nodeStructureChanged(node);
}
} public void treeCollapsed(TreeExpansionEvent event) {
}
});
return tree;
} catch (Exception ex) {
ex.printStackTrace();
} finally {
try {
in.close();
fin.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return null;
} public Main() {
writeTree("C:/b.ser");
GetFileTree filetree1 = readTree();
GetFileTree filetree2 = new GetFileTree("C:\\3\\");
this.getContentPane().setLayout(new GridLayout(2, 1));
this.getContentPane().add(new JScrollPane(filetree1.jtree));
this.getContentPane().add(new JScrollPane(filetree2.jtree));
this.setLocation(new Point(350, 200));
this.setSize(new Dimension(500, 500));
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} public static void main(String[] args) throws FileNotFoundException, IOException {
new Main();
}}
”中用Listener构建是什么意思?还有为啥Listener不会被序列化?而且JTree不是本身就已经实现序列化接口了嘛?
import java.io.File;
import java.util.Iterator;
import java.util.Vector;import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeModelEvent;
import javax.swing.event.TreeModelListener;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;public class FileTree extends JFrame { private JTree fileTree; private FileSystemModel fileSystemModel; public FileTree(String directory) {
super("JTree FileSystem Viewer");
fileSystemModel = new FileSystemModel(new File(directory));
fileTree = new JTree(fileSystemModel);
fileTree.setEditable(true);
fileTree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent event) {
File file = (File) fileTree.getLastSelectedPathComponent();
}
});
add(new JScrollPane(fileTree));
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(640, 480);
setVisible(true);
} public static void main(String args[]) {
new FileTree("c:/");
}}class FileSystemModel implements TreeModel {
private File root; private Vector listeners = new Vector(); public FileSystemModel(File rootDirectory) {
root = rootDirectory;
} public Object getRoot() {
return root;
} public Object getChild(Object parent, int index) {
File directory = (File) parent;
String[] children = directory.list();
return new TreeFile(directory, children[index]);
} public int getChildCount(Object parent) {
File file = (File) parent;
if (file.isDirectory()) {
String[] fileList = file.list();
if (fileList != null)
return file.list().length;
}
return 0;
} public boolean isLeaf(Object node) {
File file = (File) node;
return file.isFile();
} public int getIndexOfChild(Object parent, Object child) {
File directory = (File) parent;
File file = (File) child;
String[] children = directory.list();
for (int i = 0; i < children.length; i++) {
if (file.getName().equals(children[i])) {
return i;
}
}
return -1; } public void valueForPathChanged(TreePath path, Object value) {
File oldFile = (File) path.getLastPathComponent();
String fileParentPath = oldFile.getParent();
String newFileName = (String) value;
File targetFile = new File(fileParentPath, newFileName);
oldFile.renameTo(targetFile);
File parent = new File(fileParentPath);
int[] changedChildrenIndices = { getIndexOfChild(parent, targetFile) };
Object[] changedChildren = { targetFile };
fireTreeNodesChanged(path.getParentPath(), changedChildrenIndices,
changedChildren); } private void fireTreeNodesChanged(TreePath parentPath, int[] indices,
Object[] children) {
TreeModelEvent event = new TreeModelEvent(this, parentPath, indices,
children);
Iterator iterator = listeners.iterator();
TreeModelListener listener = null;
while (iterator.hasNext()) {
listener = (TreeModelListener) iterator.next();
listener.treeNodesChanged(event);
}
} public void addTreeModelListener(TreeModelListener listener) {
listeners.add(listener);
} public void removeTreeModelListener(TreeModelListener listener) {
listeners.remove(listener);
} private class TreeFile extends File {
public TreeFile(File parent, String child) {
super(parent, child);
} public String toString() {
return getName();
}
}
}
socket连接和传送的代码?代码问题或者网络问题