📄 winexplorer.java
字号:
package myapplet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.DateFormat;
import javax.swing.event.*;
import javax.swing.table.*;
import javax.swing.tree.*;
import javax.swing.filechooser.*;
import java.io.*;
import java.io.File;
import java.util.*;
public class WinExplorer extends JPanel implements TreeSelectionListener{
JToolBar toolBar = new JToolBar();
JButton bttUp = new JButton();
Icon iconUp=UIManager.getIcon("FileChooser.upFolderIcon");
JLabel statusBar = new JLabel();
DetailTable detailTable = new DetailTable();
JScrollPane sp = new JScrollPane(detailTable);
JSplitPane split = new JSplitPane();
FileSystemView fileSystemView=FileSystemView.getFileSystemView();
File root=fileSystemView.getRoots()[0];
FileNode rt=new FileNode(fileSystemView.getRoots()[0]);//setRoot();
DefaultTreeModel treeModel=new DefaultTreeModel(rt);
JTree tree = new JTree(treeModel);
TreePath recordTp=new TreePath(rt);
public FileNode setRoot(){
FileNode root1=new FileNode(fileSystemView.getRoots()[0]);
File[] file=root.listFiles();
for(int f=0;f<file.length;f++){
if(file[f].isDirectory()){
// System.out.println("this root direcctory is " + file[f].toString());
root1.add(new FileNode(file[f]));
}
}
return root1;
}
public static void setDisplay(){
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
Font font=new Font("宋体",Font.PLAIN,12);
String names[]={"Label","CheckBox","PopupMenu","TextPane",
"MenuItem","CheckBoxMenuItem","RadioButtonMenuItem",
"ComboBox","Button","Tree","ScrollPane","TabbedPane",
"EditorPane","TitledBorder","Menu","TextArea","OptionPane",
"MenuBar","ToolBar","ToggleButton","ToolTip","ProgressBar",
"TableHeader","Panel","List","ColorChooser","PasswordField",
"TextField","Table","Label","Viewport","RadioButtonMenuItem",
"RadioButton"};
for(int i=0;i<names.length;i++)UIManager.put(names[i]+".font",font);
UIManager.put("Label.foreground",Color.black);
UIManager.put("Border.foreground",Color.black);
UIManager.put("TitledBorder.titleColor",Color.black);
}catch(Exception e){
e.printStackTrace();
}
}
/* public static void main(String argv[]){
WinExplorer we=new WinExplorer();
we.setVisible(true);
we.show();
}*/
public WinExplorer() {
setDisplay();
this.setLayout(new BorderLayout());
Dimension dimension = getToolkit().getScreenSize();
int i = (dimension.width - 640) / 2;
int j = (dimension.height - 480) / 2;
setBounds(i,j,640,480);
statusBar.setText(" ");
bttUp.setIcon(iconUp);
bttUp.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
try{
TreePath upPath=tree.getSelectionPath().getParentPath();
if(upPath!=null){
tree.setSelectionPath(upPath);
tree.scrollPathToVisible(upPath);
}
}catch(Exception ex){}
}
});
split.setDividerSize(6);
split.setLeftComponent(new JScrollPane(tree));
split.setRightComponent(sp);
split.setDividerLocation(180);
sp.getViewport().setBackground(Color.white);
this.add(toolBar, BorderLayout.NORTH);
toolBar.add(bttUp, null);
this.add(statusBar, BorderLayout.SOUTH);
this.add(split, BorderLayout.CENTER);
tree.addTreeExpansionListener(new MyExpandsionListener());
tree.setCellRenderer(new MyTreeCellRenderer());
tree.addTreeSelectionListener(this);
tree.setComponentOrientation(ComponentOrientation.UNKNOWN);
}
public void valueChanged(TreeSelectionEvent e){
Object obj=tree.getLastSelectedPathComponent();
recordTp=e.getPath();
if(obj==null)return;
else {
detailTable.setParent( ( (FileNode) obj).getFile());
}
}
class MyTreeCellRenderer extends DefaultTreeCellRenderer {
public MyTreeCellRenderer() {}
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);
setIcon(fileSystemView.getSystemIcon(((FileNode)value).getFile()));
return this;
}
}
class MyExpandsionListener implements TreeExpansionListener {
public MyExpandsionListener() {}
public void treeExpanded(TreeExpansionEvent event) {
if (tree.getLastSelectedPathComponent()==null){return;}
tree.setCursor(new Cursor(Cursor.WAIT_CURSOR));
TreePath path =event.getPath();
FileNode node = (FileNode)path.getLastPathComponent();
node.explore();
treeModel.nodeStructureChanged(node);
tree.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
}
public void treeCollapsed(TreeExpansionEvent event) {}
}
class FileNode extends DefaultMutableTreeNode {
private boolean explored = false;
public FileNode(File file) { setUserObject(file); }
public boolean getAllowsChildren() { return isDirectory(); }
public boolean isLeaf() { return !isDirectory();}
public File getFile() { return (File)getUserObject(); }
public boolean isExplored() { return explored; }
public void setExplored(boolean b){ explored=b;}
public boolean isDirectory() { return getFile().isDirectory();}
public String toString() {
File file = (File)getUserObject();
String filename = file.toString();
int index = filename.lastIndexOf(File.separator);
return (index != -1 && index != filename.length()-1)
? filename.substring(index+1) : filename;
}
public void explore() {
if(!isExplored()) {
File file = getFile();
File[] children = file.listFiles();
if(children==null||children.length==0)return;
for(int i=0; i < children.length; ++i)
{
File f=children[i];
if(f.isDirectory())add(new FileNode(children[i]));
}
explored = true;
}
}
}
class DetailTable extends JTable{
DetailTableModel model=new DetailTableModel();
public DetailTable(){
setModel(model);
setShowGrid(false);
TableColumnModel colModel = getColumnModel();
for (int i=0;i<3;i++)
colModel.getColumn(i).setCellRenderer(new DetailsTableCellRenderer());
setRowHeight(18);
this.addMouseListener(new MouseAdapter(){
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2){
for (int i = 0; i <getRowCount(); i++) {
if(getCellRect(i,0,true).contains(e.getPoint())){
openSelect(model.getValueAt(getSelectedRow(),0));
break;
}
}
}
}
});
}
public void openSelect(Object obj){
// Object obj=model.getValueAt(getSelectedRow(),0);
if(obj==null)return;
File f=(File)obj;
if(f.isDirectory()){
if(obj==null)return;
else {
int index=tree.getRowForPath(recordTp);
tree.setSelectionRow(index);
tree.expandRow(index);
String strName="";
if(tree.getLastSelectedPathComponent()==null)return;
else{
if(fileSystemView.isDrive(f)||f.getName().trim().equals("ShellFolder:"))
strName=f.toString();
else{
strName=f.getName();
}
// System.out.println("the last selected path component "+tree.getLastSelectedPathComponent().toString()+" ths strname is "+strName);
while (!(tree.getLastSelectedPathComponent().toString().trim().equals(strName))){
tree.setSelectionRow(index++);
}
tree.setSelectionPath(tree.getPathForRow(index-1));
tree.expandRow(index-1);
}
}
}
else{
try {
String osname=System.getProperty("os.name");
if(osname.equals("Windows 2000")||osname.equals("Windows xp")){
Process p = Runtime.getRuntime().exec("cmd.exe /c \"" + f.getPath() +
"\"");
}
}
catch (IOException ex) {
}
}
}
public void setParent(File parent){
model.removeAllRows();
File list[]=parent.listFiles();
if(list==null)return;
Vector vDir=new Vector(),vFile=new Vector();
for (int i = 0; i < list.length; i++) {
if(list[i].isDirectory()&&!(list[i].getName().trim().equals("ShellFolder:")))vDir.add(list[i]);
else vFile.add(list[i]);
}
sortElements(vFile);
sortElements(vDir);
for (int i = 0; i < vDir.size(); i++)model.addFile((File)vDir.elementAt(i));
for (int i = 0; i < vFile.size(); i++)model.addFile((File)vFile.elementAt(i));
}
public void sortElements(Vector v)
{
for(int i=0;i<v.size();i++)
{
int k=i;
for(int j=i+1;j<v.size();j++){
File fa=(File)v.elementAt(j);
File fb=(File)v.elementAt(k);
if(fileSystemView.getSystemDisplayName(fa).toLowerCase().compareTo(
fileSystemView.getSystemDisplayName(fb).toLowerCase())<0)k=j;
}
if(k!=i)swap(k,i,v);
}
}
private void swap(int loc1,int loc2,Vector v){
Object tmp=v.elementAt(loc1);
v.setElementAt(v.elementAt(loc2),loc1);
v.setElementAt(tmp,loc2);
}
class DetailTableModel extends DefaultTableModel {
public DetailTableModel() {
addColumn("名称");
addColumn("大小");
addColumn("修改时间");
}
public void addFile(File f){
addRow(new Object[]{f,new Double(f.length()/1024),
new java.sql.Date(f.lastModified())});
}
public void removeAllRows(){
while(getRowCount()!=0) removeRow(0);
}
public boolean isCellEditable(int row, int column) {return false;}
}
class DetailsTableCellRenderer extends DefaultTableCellRenderer {
DetailsTableCellRenderer() {}
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
if (column == 1){
setHorizontalAlignment(SwingConstants.TRAILING);
isSelected=hasFocus=false;
}else if(column==2){
setHorizontalAlignment(SwingConstants.CENTER);
isSelected=hasFocus=false;
}else setHorizontalAlignment(SwingConstants.LEADING);
return super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
}
public void setValue(Object value) {
setIcon(null);
if (value instanceof File) {
File file = (File)value;
setText(fileSystemView.getSystemDisplayName(file));
setIcon(fileSystemView.getSystemIcon(file));
}else{
super.setValue(value);
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -