文件一:import java.awt.Component;import java.awt.Cursor;import java.io.File;import java.io.Serializable;import java.util.ArrayList;import java.util.Collections;import javax.swing.JTree;import javax.swing.event.TreeExpansionEvent;import javax.swing.event.TreeExpansionListener;import javax.swing.filechooser.FileSystemView;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.DefaultTreeModel;import javax.swing.tree.TreePath;public class JFileTree extends JTree implements Serializable { public static final FileSystemView fileSystemView = FileSystemView .getFileSystemView(); DefaultTreeModel treeModel; /*** 指定过滤器的文件树* * @param filter*
FileFilter 指定过滤器*/ public JFileTree(java.io.FileFilter filter) {FileNode root = new FileNode(fileSystemView.getRoots()[0], filter);treeModel = new DefaultTreeModel(root);root.explore();treeModel.nodeStructureChanged(root);this.setModel(treeModel);addTreeExpansionListener(new JFileTreeExpandsionListener());setCellRenderer(new JFileTreeCellRenderer()); } /*** 取得当前选择的节点* * @return FileNode*/ public FileNode getSelectFileNode() {TreePath path = getSelectionPath();if (path == null || path.getLastPathComponent() == null) { return null;}return (FileNode) path.getLastPathComponent(); }/*** 取得当前选择的文件或目录* * @return File*/ public File getSelectFile() {FileNode node = getSelectFileNode();return node == null ? null : node.getFile(); } class JFileTreeCellRenderer extends DefaultTreeCellRenderer {public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) { super.getTreeCellRendererComponent(tree, value, sel, expanded,
leaf, row, hasFocus); try {
closedIcon = fileSystemView.getSystemIcon(((FileNode) value)
.getFile());
openIcon = closedIcon;
setIcon(closedIcon); } catch (Exception ex) { } return this;} } class JFileTreeExpandsionListener implements TreeExpansionListener {public JFileTreeExpandsionListener() {}public void treeExpanded(TreeExpansionEvent event) { TreePath path = event.getPath(); if (path == null || path.getLastPathComponent() == null)
return; setCursor(new Cursor(Cursor.WAIT_CURSOR)); FileNode node = (FileNode) path.getLastPathComponent(); node.explore(); JTree tree = (JTree) event.getSource(); DefaultTreeModel treeModel = (DefaultTreeModel) tree.getModel(); treeModel.nodeStructureChanged(node); setCursor(new Cursor(Cursor.DEFAULT_CURSOR));}public void treeCollapsed(TreeExpansionEvent event) {} } public static class FileNode extends DefaultMutableTreeNode {private boolean explored = false;private java.io.FileFilter filter = null;public FileNode(File file, java.io.FileFilter filter) { this.filter = filter; setUserObject(file);}public boolean getAllowsChildren() { return isDirectory();}public boolean isDirectory() { return !isLeaf();}public boolean isLeaf() { return getFile().isFile();}public File getFile() { return (File) getUserObject();}public boolean isExplored() { return explored;}public void setExplored(boolean b) { explored = b;}public String toString() { if (getFile() instanceof File)
return fileSystemView.getSystemDisplayName((File) getFile()); else
return getFile().toString();}/** * 展开节点 */public void explore() { if (!explored) {
explored = true;
File file = getFile();
File[] children = file.listFiles();
if (children == null || children.length == 0) {
return;
}
// 过滤后排序,选加入排序后的目录, 再加入排序后的文件
ArrayList listDir = new ArrayList();
ArrayList listFile = new ArrayList();
for (int i = 0; i < children.length; ++i) {
File f = children;
if (filter.accept(f)) {
if (f.isDirectory()) {
listDir.add(f);
} else {
listFile.add(f);
}
}
}
Collections.sort(listDir);
Collections.sort(listFile);
for (int i = 0; i < listDir.size(); i++) {
add(new FileNode((File) listDir.get(i), filter));
}
for (int i = 0; i < listFile.size(); i++) {
add(new FileNode((File) listFile.get(i), filter));
} }} }}文件二import java.awt.Container;import java.awt.Dimension;import java.awt.Graphics;import java.awt.Toolkit;import java.io.File;import java.io.FileFilter;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JSplitPane;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;public class PictShow extends JFrame { private ImageIcon icon = new ImageIcon(); private JPanel pictPanel; private JFileTree pictTree; public PictShow() throws Exception {super("JPG图片资源管理器");buildFrame(); } private void buildFrame() throws Exception {Container container = getContentPane();JSplitPane split = new JSplitPane();pictPanel = new JPanel() {// 显示图片的面板 protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(icon.getImage(), 10, 10, null); }};
JScrollPane scroll=new JScrollPane();scroll.setViewportView(pictPanel);split.add(scroll, JSplitPane.RIGHT);pictTree = new JFileTree(new FileFilter() { public boolean accept(File pathname) {
if (pathname != null) {
if (pathname.isDirectory()) {
return true;
}
String name = pathname.getName().toLowerCase();
return name.endsWith(".jpg");
}
return false; }});
pictTree.addTreeSelectionListener( //添加监听器
new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
File file = pictTree.getSelectFile();
if (file != null && file.isFile()
&& file.getName().toLowerCase().endsWith(".jpg")) {
icon = new ImageIcon(file.getAbsolutePath());
pictPanel.setPreferredSize(new Dimension(icon.getIconWidth(),icon.getIconHeight()));
pictPanel.revalidate();
pictPanel.repaint();
}
}
}
);
split.add(new JScrollPane(pictTree), JSplitPane.LEFT);//将显示图片的面板添加到split中setSize(800, 600);split.setDividerLocation((int)(getSize().width*0.3));
container.add(split);//将split添加到容器用于显示//屏幕居中Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();Dimension frameSize = getSize();setLocation((screenSize.width-frameSize.width)/2 , (screenSize.height-frameSize.height)/2);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) throws Exception {new PictShow(); }}
|