?? explorer.java
字號:
/**
*定義資源管理器類,包括初始化,點擊tree和list事件的監聽,樹的展開與收縮監聽
*調用FileNode.java構造目錄樹
*/
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.awt.*;
import java.awt.event.*;
import java.io.File;
import java.util.EventObject;
import java.util.*;
public class Explorer extends JFrame implements TreeExpansionListener,TreeSelectionListener, ActionListener
//資源管理器類實現:樹展開監聽器,選擇樹監聽器,列表的單擊動作監聽器
{
final JTree tree = new JTree(createTreeModel());//定義樹型
final JPanel list = new JPanel(new GridLayout(19,3));//定義列表
final JSplitPane split;
final JPanel jPanel1 = new JPanel(new BorderLayout());//添加面板
final JLabel jLabel1 = new JLabel(" ");//記錄所選擇文件的路徑
final JLabel jLabel2 = new JLabel("中國民航大學 05B 張浩");
public Explorer()
{
//******初始化窗體,將其設置在正中
Dimension dimension = getToolkit().getScreenSize();
int i = (dimension.width - 640) / 2;
int j = (dimension.height - 480) / 2;
setBounds(i, j, 640, 480);
//******
setTitle("資源管理器");
//******關閉窗口事件
addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent windowevent)
{
System.exit(0);
}
}
);
//******
//******初始化樹tree和list
JScrollPane treeView = new JScrollPane(tree);
treeView.setPreferredSize(new Dimension(200,200));
JScrollPane listView = new JScrollPane(list);
listView.setPreferredSize(new Dimension(300,600));
split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,treeView,listView);
split.setLastDividerLocation(600);
getContentPane().add(split);
list.setBackground(Color.white);
//******
tree.addTreeExpansionListener(this);
tree.addTreeSelectionListener(this);
try
{
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
SwingUtilities.updateComponentTreeUI(this);
}
catch (Exception ex) {}
//******設置地址欄的位置
getContentPane().add(jLabel2,BorderLayout.SOUTH);
getContentPane().add(jPanel1, BorderLayout.NORTH);
jPanel1.add(jLabel1, BorderLayout.CENTER);
//******
}
//****************************實現借口TreeExpansionEvent的方法
public void treeCollapsed(TreeExpansionEvent e) {}
public void treeExpanded(TreeExpansionEvent e)
{
if (tree.getLastSelectedPathComponent() == null) //返回當前選擇的第一個節點中的最后一個路徑組件
{
return;
}
if (tree.getLastSelectedPathComponent().toString().trim().equals("Local"))
{
return;
}
TreePath path = e.getPath();//獲得節點的路徑
//!!!!!!!!!!!
FileNode node = (FileNode) path.getLastPathComponent();
if (!node.isExtended())
{
DefaultTreeModel model = (DefaultTreeModel) tree.getModel();
node.Extend();
model.nodeStructureChanged(node);
}
//!!!!!!!!!!!!!!!
}
//*******************************************************************
//**********************************************實現接口TreeSelectionEvent的方法
public void valueChanged(TreeSelectionEvent e)
//該方法在改變選擇項時調用
{
try
{
if (tree.getLastSelectedPathComponent() == null)
{
return;
}
list.removeAll();
if (tree.getLastSelectedPathComponent().toString().trim().equals("Local"))
//點擊local返回各盤根目錄
{
File roots[] = File.listRoots();
for (int i = 1; i < roots.length; i++)
{
String DiskName = roots[i].toString();
DiskName = DiskName.substring(0, DiskName.indexOf(":")+1);//D:\->D:
addButton(DiskName, "");//通過addButton將盤符添加到list中
}
}
else
{
Object[] path = e.getPath().getPath();//返回第一個路徑元素的路徑
String fileInfo = "";//記錄當前文件的路徑和名稱
for (int i = 1; i < path.length; i++)
{
fileInfo += File.separator + path[i].toString();
}
File f = new File(fileInfo.substring(1));
//System.out.print(fileInfo);//\C:\\WINDOWS
jLabel1.setText(f.toString());
String[] Tlist = f.list();
Vector vFile = new Vector(), vDir = new Vector();
for (int i = 0; i < Tlist.length; i++)
{
if ((new File(fileInfo + File.separator + Tlist[i])).isDirectory())
{
vDir.addElement(Tlist[i]);
}
else
{
vFile.addElement(Tlist[i]);
}
}
sortElements(vFile);
sortElements(vDir);
for (int i = 0; i < vDir.size(); i++) {
addButton((String) (vDir.elementAt(i)), fileInfo);
}
for (int i = 0; i < vFile.size(); i++) {
addButton((String) (vFile.elementAt(i)), fileInfo);
}
}
list.doLayout();
list.repaint();
}
catch (Exception ee) {}
}
//**********************************************************************************
//************************************************將list中的項按首字母排序
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++)
{
if (((String) (v.elementAt(j))).toLowerCase().compareTo(((String) (v.elementAt(k))).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);
}
//****************************************
//*************list中項目以按鈕形式出現,每個文件為一個按鈕
private void addButton(String fileName, String filePath)
{
JButton btt = new JButton(fileName);
btt.setBorder(null);
btt.setHorizontalAlignment(SwingConstants.LEFT);
btt.setBackground(Color.white);
//******為按鈕添加圖標
if ((new File(filePath + File.separator + fileName)).isDirectory())
{
btt.setIcon(UIManager.getIcon("Tree.closedIcon"));
}
else
{
btt.setIcon(UIManager.getIcon("Tree.leafIcon"));
}
//******
list.add(btt);
btt.addActionListener(this);
}
//******************************************
//********************************點擊tree中的節點和list中的按鈕出發事件
public void actionPerformed(ActionEvent e)
{
try
{
TreePath p = tree.getLeadSelectionPath();//點擊tree
String fileName = ((JButton) (e.getSource())).getText();//點擊list
Object[] path = p.getPath();
String fileInfo = "";
for (int i = 1; i < path.length; i++)
{
fileInfo += File.separator + path[i].toString();//file.separator為分割符"\"
}
//System.out.print(ss);//\C:\\C:\\Borland
fileInfo = fileInfo.substring(1);
File f = new File(fileInfo + File.separator + fileName);
jLabel1.setText(f.toString());
if (f.isDirectory())
//當選擇項為文件夾時
{
int index = tree.getRowForPath(p);
tree.expandRow(index);
while (!(tree.getLastSelectedPathComponent().toString().trim().equals(fileName)))
{
tree.setSelectionRow(index++);
}
tree.expandRow(index - 1);
}
else
{//為文件時,當遇如下后綴時,用記事本將其打開
jLabel2.setText("文件大小:"+f.length()+"B");//顯示文件大小
String postfix = fileName.toUpperCase();
if (
postfix.indexOf(".TXT") != -1 ||
postfix.indexOf(".JAVA") != -1 ||
postfix.indexOf(".HTM") != -1 ||
postfix.indexOf(".LOG") != -1
)
{
Runtime.getRuntime().exec("NotePad.exe " + fileInfo +File.separator + fileName);
// System.out.println(fileInfo +File.separator + fileName);
//System.out.println(fileInfo);
//System.out.println(File.separator);
//System.out.println(fileName);
}
}
}
catch (Exception ee) {}
}
//***************************************************************
//*********************************初始化樹型,獲得本地文件系統,將根目錄賦給樹
private DefaultMutableTreeNode createTreeModel()
{
DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Local");//創建樹的根節點
File[] rootPath = File.listRoots();//列出可用的文件系統根目錄c: d: e: f:
for (int i = 1; i < rootPath.length; i++)
{
FileNode Node = new FileNode(rootPath[i]);
Node.Extend();
rootNode.add(Node);
}
return rootNode;
}
//****************************************************************************
public static void main(String args[])
{
Explorer ex =new Explorer();
ex.setVisible(true);
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -