filetable.java

来自「MyUploader 是一款使用 http 协议(RFC 1867)用于上传文件」· Java 代码 · 共 611 行 · 第 1/2 页

JAVA
611
字号
/* * Copyright 2006-2007 JavaAtWork All rights reserved. * Use is subject to license terms. */package javaatwork.myuploader;import java.awt.Component;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.dnd.DnDConstants;import java.awt.dnd.DropTargetDragEvent;import java.awt.dnd.DropTargetDropEvent;import java.awt.dnd.DropTargetEvent;import java.awt.dnd.DropTargetListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.File;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Vector;import javaatwork.myuploader.dialog.FileFilterException;import javaatwork.myuploader.dialog.UploadFileFilter;import javaatwork.myuploader.dialog.UploadRejectFileFilter;import javaatwork.myuploader.domain.FormFileField;import javaatwork.myuploader.icons.DownIcon;import javaatwork.myuploader.icons.UpIcon;import javaatwork.myuploader.net.ContentTypeMapper;import javaatwork.myuploader.utils.LocaleManager;import javaatwork.myuploader.utils.Logger;import javaatwork.myuploader.utils.Parameters;import javax.swing.JLabel;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JTable;import javax.swing.UIManager;import javax.swing.table.DefaultTableCellRenderer;import javax.swing.table.JTableHeader;import javax.swing.table.TableCellRenderer;/** * Class for showing the files in a table. *  * @author Johannes Postma */public class FileTable extends JTable {	/**	 * serialVersionUID	 */	private static final long serialVersionUID = -7046734930044670655L;	private boolean sortOnFile = true;	private boolean sortDown = true;	private LocaleManager localeManager = null;	private UploadApplet uploadApplet = null;	private Vector files = new Vector();	private FileTableModel model = new FileTableModel(files);	private JMenuItem itemPaste = null;	private JPopupMenu popup = new JPopupMenu();	private UploadRejectFileFilter rejectFileFilter = null;		/**	 * Creates a new FileTable.	 * 	 * @param uploadApplet The applet.	 */	public FileTable(UploadApplet uploadApplet) {				this.uploadApplet = uploadApplet;		localeManager = LocaleManager.getInstance();					// check if the rejected filefilter must be created		String rejectedExtensions = Parameters.getParameter(Parameters.REJECT_FILEFILTER, "");					if (rejectedExtensions != null && !rejectedExtensions.trim().equalsIgnoreCase("")) {			try {				rejectFileFilter = new UploadRejectFileFilter(rejectedExtensions);			} catch (FileFilterException e) {				Logger.log("FileTable", "FileTable()", e.getMessage());			}		}				// sets the table properties		DefaultTableCellRenderer rightRenderer = new DefaultTableCellRenderer();			// determine the columnames		String columnNames[] = new String[3];		columnNames[0] = localeManager.getString("nr") + ".";		columnNames[1] = localeManager.getString("file");		columnNames[2] = localeManager.getString("size");					model.setColumnNames(columnNames);		setModel(model);				// create popup		itemPaste = new JMenuItem(localeManager.getString("paste"));		popup.add(itemPaste);		add(popup);				rightRenderer.setHorizontalAlignment(JLabel.RIGHT);				getTableHeader().addMouseListener(new TableMouseAdapter());				//	don't move the columns		getTableHeader().setReorderingAllowed(false);						getColumnModel().getColumn(0).setCellRenderer(rightRenderer);		getColumnModel().getColumn(2).setCellRenderer(rightRenderer);		getColumnModel().getColumn(0).setMaxWidth(35);		getColumnModel().getColumn(1).setPreferredWidth(100);		getColumnModel().getColumn(2).setPreferredWidth(20);		getColumnModel().getColumn(2).setHeaderRenderer(new TableHeaderRenderer());		getColumnModel().getColumn(1).setHeaderRenderer(new TableHeaderRenderer());					// add the mouselistener needed to show the popup		// if the tablemodel is full		addMouseListener(new MouseAdapter() {			public void mousePressed(MouseEvent e) {				maybeShowPopup(e);			}			public void mouseReleased(MouseEvent e) {				maybeShowPopup(e);			}		});				//	 add the actionlistener needed for the paste		itemPaste.addActionListener(new ActionListener() {			public void actionPerformed(ActionEvent e) {				 Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();		         Transferable content = clipboard.getContents(this);                 DataFlavor[] flavors = content.getTransferDataFlavors();                 paste(flavors, content);			}		});		}		/**	 * Paste the files of the clipboard to the table.	 * 	 * @param flavors The DataFlavor [].	 * @param transferable The transferable.	 */	public void paste(DataFlavor[] flavors, Transferable transferable) {				for (int i = 0; i < flavors.length; i++)   { 			DataFlavor dataFlavor = flavors[i];						try  {				if (dataFlavor.equals(DataFlavor.javaFileListFlavor)) {					List fileList = (List) transferable.getTransferData(dataFlavor);					File [] file = (File[])fileList.toArray(new File[fileList.size()]);					addFiles(file);					uploadApplet.updateSummary();							}         			} catch(Exception e)  {				Logger.log("FileTable", "paste()", e.getMessage());						}		}	}	/**	 * Returns a list of allowed files. The rules are	 * described in the filefilter	 * With drag and drop all kind of files could be added to the list	 * if the param fileFilter exists and disableDefaultFileFilter is true only	 * files of the fileFilter could be added to the list.	 * 	 * @param files The unallowed files.	 * @return The array of allowed files.	 */	private File[] getFilteredFiles(File [] files) {				try {			boolean disable = Parameters.getParameter(Parameters.DISABLE_DEFAULT_FILEFILTER, false);			String fileFilter = Parameters.getParameter(Parameters.FILEFILTER, "");					if (disable && fileFilter !=null) {								List fileList = new ArrayList();								UploadFileFilter filter = new UploadFileFilter(fileFilter);							for (int j = 0; j < files.length; j++) {										if (filter.accept(files[j])) {						fileList.add(files[j]);											}				}								// return the changed array of files				File [] file = (File[])fileList.toArray(new File[fileList.size()]);								return file;			}		} catch (FileFilterException ffe) {			Logger.log("FileTable", "getFilteredFiles()", ffe.toString());		}						// nothing is changed return the original array of files		return files;	}		/**	 * Sort the files.	 * 	 * @param tableColumn The tablecolumn.	 * @param down Ascending.	 */	public void sort(final int tableColumn, final boolean down) {				Collections.sort(files, new Comparator() {			public int compare(Object arg0, Object arg1) {				FormFileField fileField1 = (FormFileField)arg0;				FormFileField fileField2 = (FormFileField)arg1;								if (tableColumn == 1) {					if (down) {						return (fileField1.getUploadName().toLowerCase().compareTo(fileField2.getUploadName().toLowerCase()));					} else {						return (fileField2.getUploadName().toLowerCase().compareTo(fileField1.getUploadName().toLowerCase()));					}				} else {					if (down) {						if (fileField1.getFile().length() > fileField2.getFile().length()) {							return 1;						} else if (fileField1.getFile().length() < fileField2.getFile().length()) {							return -1;						} else {							return (fileField1.getUploadName().toLowerCase().compareTo(fileField2.getUploadName().toLowerCase()));						}					} else {						if (fileField1.getFile().length() > fileField2.getFile().length()) {							return -1;						} else if (fileField1.getFile().length() < fileField2.getFile().length()) {							return 1;						} else {							return (fileField1.getUploadName().toLowerCase().compareTo(fileField2.getUploadName().toLowerCase()));						}					}				}			}					});	}		/**	 * Deletes the selected files of the table.	 */	public void deleteFiles() {		if (!getSelectionModel().isSelectionEmpty()) {			int[] rows = getSelectedRows();			for (int i = rows.length; i > 0; i--) {				files.removeElementAt(rows[i - 1]);			}						if (Parameters.getParameter(Parameters.COLDFUSION, false)) {				changeNames();			}						model.fireTableDataChanged();						// the table header must be updated to remove the down/upicon			// in case of 1 files or 0 files			getTableHeader().updateUI();		}	}		/**	 * Deletes all files in the table.	 */	public void deleteAllFiles() {				files.removeAllElements();		model.fireTableDataChanged();				// the table header must be updated to remove the down/upicon		// in case of 1 files or 0 files		getTableHeader().updateUI();	}		/**	 * Add a directory to the internal collection.	 * 	 * @param formFileField The FormFileField	 */	public void addDirectory(FormFileField formFileField) {				ContentTypeMapper contentTypeMapper = ContentTypeMapper.getInstance();				// retrieve the allowed files		File [] list = getFilteredFiles(formFileField.getFile().listFiles());				for (int i = 0; i < list.length; i++) {

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?