?? fileviewimpl.java
字號:
package mvc;
import gui.*;
import basic.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;
import java.io.File;
import java.util.Collection;
import javax.swing.*;
import javax.swing.tree.*;
import javax.swing.border.*;
import javax.swing.JPopupMenu;
import javax.swing.BorderFactory;
import javax.swing.event.TreeExpansionEvent;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.event.TreeWillExpandListener;
import javax.swing.table.TableColumn;
import javax.swing.table.TableColumnModel;
import javax.swing.tree.DefaultTreeCellRenderer;
import java.util.*;
/*
* Created on 2005-5-6
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
/**
* @author Administrator
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class FileViewImpl extends JFrame implements FileView,ActionListener {
private FileModel model;
private FileControllerImpl control;
private JTable table;
private JTree tree;
private FileTBModel tableModel;
private Collection roots;
private DefaultTreeModel treeModel;
private JLabel addressLabel;
private JTextField addressTextField;
private JButton upBtn;
private JButton addFolderBtn;
private JButton addFileBtn;
private JButton deleteBtn;
private JButton exitBtn;
private File currentFile;
private TNode currentNode;
private TreePath curPath;
private boolean isTable = false;
private JPopupMenu popMenu;
private JMenuItem addFolderMenu;
private JMenuItem addFileMenu;
private JMenuItem deleteMenu;
/**
* The tree mouse selection event processor
* @author George Wen
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
private class TreeSelectionProcesser implements TreeSelectionListener{
public void valueChanged(TreeSelectionEvent e){
try{
curPath = tree.getSelectionPath();
currentNode = (TNode)e.getPath().getLastPathComponent();
currentFile = currentNode.getFile();
tree.scrollPathToVisible(curPath);
addressTextField.setText(currentFile.getAbsolutePath());
isTable = false;
if(!currentFile.getName().equals("My Computer")){
Collection files = control.handleGetAll(currentNode.getFile());
tableModel.addAllFiles(files);
upBtn.setEnabled(true);
addFolderBtn.setEnabled(true);
addFileBtn.setEnabled(true);
addFolderMenu.setEnabled(true);
addFileMenu.setEnabled(true);
if(!((TNode)currentNode.getParent()).isRoot()){
deleteBtn.setEnabled(true);
deleteMenu.setEnabled(true);
}
else{
deleteBtn.setEnabled(false);
deleteMenu.setEnabled(false);
}
}
else{
upBtn.setEnabled(false);
addFolderBtn.setEnabled(false);
addFileBtn.setEnabled(false);
deleteBtn.setEnabled(false);
addFolderMenu.setEnabled(false);
addFileMenu.setEnabled(false);
deleteMenu.setEnabled(false);
currentNode = (TNode)treeModel.getRoot();
tableModel.addAllFiles(control.handleGetRootFiles());
}
}
catch(Exception ee){
JOptionPane.showMessageDialog(null,"Read file error!","Error",JOptionPane.ERROR_MESSAGE);
ee.printStackTrace();
}
}
}
/**
* The tree will be expand event processor
* @author George Wen
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
private class TreeWillExpandProcessor implements TreeWillExpandListener{
public void treeWillExpand(TreeExpansionEvent e){
try{
currentNode = (TNode)e.getPath().getLastPathComponent();
if(!currentNode.getName().equals("My Computer")){
Collection directories = control.handleGetAllDirectories(currentNode.getFile());
appendNodes(currentNode,directories);
treeModel.nodeStructureChanged(currentNode);
}
}
catch(Exception ee){
JOptionPane.showMessageDialog(null,"Read file error!","Error",JOptionPane.ERROR_MESSAGE);
ee.printStackTrace();
}
}
public void treeWillCollapse(TreeExpansionEvent ec){
}
}
/**
* This is the table mouse click event processor
* @author George Wen
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
private class mouseClickedProcessor extends MouseAdapter {
public void mouseClicked(MouseEvent e){
int clickedIndex = table.getSelectedRow();
if(clickedIndex >=0){
isTable = true;
currentFile = tableModel.getFile(clickedIndex);
addressTextField.setText(currentFile.getAbsolutePath());
if(!currentNode.getFile().getName().equals("My Computer")){
deleteBtn.setEnabled(true);
deleteMenu.setEnabled(true);
}
}
if(e.getClickCount()>=2){
if(currentFile.isDirectory()){
try{
upBtn.setEnabled(true);
if(!tree.isExpanded(curPath))
tree.expandPath(curPath);
if(currentNode.getChildCount()>0){
for(int i=0;i<currentNode.getChildCount();i++){
TNode temp = (TNode)currentNode.getChildAt(i);
if(temp.getFile().getPath().equalsIgnoreCase(currentFile.getPath())){
TreeNode[] nodes = treeModel.getPathToRoot(temp);
curPath = new TreePath(nodes);
tree.setSelectionPath(curPath);
break;
}
}
}
}
catch(Exception ee){
ee.printStackTrace();
}
}
}
else if(e.getButton() == e.BUTTON3){
popMenu.show(table,e.getX(),e.getY());
}
}
}
public FileViewImpl(FileModel model){
super("Resources Explore...");
this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
upBtn = new JButton(new ImageIcon("icons\\up.png"));upBtn.setEnabled(false);
upBtn.setPreferredSize(new Dimension(20,18));
addressLabel = new JLabel("Address: ");
addressTextField = new JTextField();
addressTextField.setForeground(Color.BLUE);
addFolderBtn = new JButton("Add Folder");addFolderBtn.setEnabled(false);
addFileBtn = new JButton("Add File");addFileBtn.setEnabled(false);
deleteBtn = new JButton("Delete Me");deleteBtn.setEnabled(false);
exitBtn = new JButton("Exit");
popMenu = new JPopupMenu("PopMenu");
addFolderMenu = new JMenuItem("AddFolder");addFolderMenu.setEnabled(false);popMenu.add(addFolderMenu);
addFileMenu = new JMenuItem("AddFile");addFileMenu.setEnabled(false);popMenu.add(addFileMenu);
deleteMenu = new JMenuItem("Delete");deleteMenu.setEnabled(false);popMenu.add(deleteMenu);
try{
this.model = model;
model.addViews(this);
control = new FileControllerImpl(this,model);
roots = control.handleGetRootNodes();//獲得要加到根節(jié)點(diǎn)的磁盤盤符數(shù)組
}
catch(Exception e){
e.printStackTrace();
}
/**
* Tree的初始化和相關(guān)配置,TNode為樹的Node類,根節(jié)點(diǎn)為root,roots為要加到根節(jié)點(diǎn)上的磁盤盤符
* appendNodes為添加節(jié)點(diǎn)的方法,調(diào)用時傳入父節(jié)點(diǎn)node,和要添加到該節(jié)點(diǎn)的節(jié)點(diǎn)數(shù)組Collection 類形
*/
TNode root = new TNode("My Computer");
currentNode = root;
Vector tn = (Vector)roots;
if(tn.size()>0){
for(int i=0;i<tn.size();i++){
TNode tmp = (TNode)tn.get(i);
tmp.add(new DefaultMutableTreeNode(""));
root.add(tmp);
}
}
treeModel = new DefaultTreeModel(root);
tree = new JTree(treeModel);
tree.setRowHeight(20);
TreeSelectionModel sm = tree.getSelectionModel();
sm.setSelectionMode(1);
tree.setSelectionModel(sm);
DefaultTreeCellRenderer treeRender = (DefaultTreeCellRenderer)tree.getCellRenderer();
treeRender.setLeafIcon(new ImageIcon("icons\\foldercolse.png"));
treeRender.setClosedIcon(new ImageIcon("icons\\foldercolse.png"));
treeRender.setOpenIcon(new ImageIcon("icons\\folderopen.png"));
treeRender.setBackgroundNonSelectionColor(Color.white);
treeRender.setBackgroundSelectionColor(Color.ORANGE);
treeRender.setBorderSelectionColor(Color.pink);
treeRender.setTextNonSelectionColor(Color.black);
treeRender.setTextSelectionColor(Color.blue);
tree.putClientProperty("JTree.lineStyle","Horizontal");
/**
* Table的相關(guān)初始化配置,初始化的時候Table中都初始化與TREE一樣的內(nèi)容,調(diào)用tableModel的addAll方法
* 把盤符信息顯示在Table中,同時調(diào)用setColumnWidth方法來設(shè)置第0例和第4例的優(yōu)先例寬,然后調(diào)用table.getColumnModel()
* 方法獲得Table的例模型從而獲得指定例名,最后調(diào)用setCellRenderer方法給獲得的該例指定一個TblCellRenderer這樣就可以在
* 給指定的例畫上圖標(biāo)什么的
*/
tableModel = new FileTBModel();
try{
tableModel.addAllFiles(control.handleGetRootFiles());
}
catch(Exception e){
e.printStackTrace();
}
table = new JTable(tableModel);
table.setShowGrid(false);
setColumnWidth(0,300);
setColumnWidth(3,150);
table.setSelectionBackground(Color.ORANGE);
table.setSelectionForeground(Color.blue);
table.setRowHeight(20);
TableColumnModel columnModel = table.getColumnModel();
TableColumn columnName = columnModel.getColumn(0);
columnName.setCellRenderer(new TblCellRenderer());
/**
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -