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 + -
显示快捷键?