📄 sharedfilestable.java
字号:
/* * JMule - Java file sharing client * Copyright (C) 2007-2008 JMule team ( jmule@jmule.org / http://jmule.org ) * * Any parts of this program derived from other projects, or contributed * by third-party developers are copyrighted by their respective authors. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * */package org.jmule.ui.swing.tables;import java.awt.Component;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.Comparator;import java.util.List;import javax.swing.ImageIcon;import javax.swing.JMenuItem;import javax.swing.JPopupMenu;import javax.swing.JTable;import javax.swing.SwingConstants;import org.jmule.core.edonkey.impl.Server;import org.jmule.core.sharingmanager.CompletedFile;import org.jmule.core.sharingmanager.PartialFile;import org.jmule.core.sharingmanager.SharedFile;import org.jmule.ui.UIConstants;import org.jmule.ui.swing.models.SharedFilesTableModel;import org.jmule.ui.utils.FileFormatter;import org.jmule.ui.utils.NumberFormatter;import org.jmule.util.GeneralComparator;import org.jmule.util.Misc;/** * * Created on Oct 2, 2008 * @author javajox * @version $Revision: 1.2 $ * Last changed by $Author: javajox $ on $Date: 2008/10/19 17:58:37 $ */public class SharedFilesTable extends JMTable { // ---------------- Table cell renderers ---------------------- class FileNameTableCellRenderer extends SharedFilesTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.LEFT); String fn = shared_file.getSharingName(); this.setText(" " + fn); this.setIcon(new ImageIcon(UIConstants.getMimeURLByExtension(Misc.getFileExtension(fn)))); return this; } } class FileSizeTableCellRenderer extends SharedFilesTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.RIGHT); this.setText(FileFormatter.formatFileSize(shared_file.length()) + " "); return this; } } class FileTypeTableCellRenderer extends SharedFilesTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.LEFT); this.setText(" " + FileFormatter.formatMimeType(shared_file.getMimeType())); return this; } } class FileHashTableCellRenderer extends SharedFilesTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setText(shared_file.getFileHash().getAsString()); return this; } } class CompletedTableCellRenderer extends SharedFilesTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column); this.setHorizontalAlignment(SwingConstants.RIGHT); if(!shared_file.isCompleted()) this.setText( NumberFormatter.formatProgress(((PartialFile)shared_file).getPercentCompleted()) + " "); else this.setText( NumberFormatter.formatProgress(100) + " " ); return this; } } private List<SharedFile> sharedFiles; public SharedFilesTable(List<SharedFile> sharedFiles) { this.sharedFiles = sharedFiles; init(); } private void init() { JMTableColumn file_name = new JMTableColumn(); file_name.setIdentifier(UIConstants.SHARED_LIST_FILE_NAME_COLUMN_ID); file_name.setModelIndex(SharedFilesTableModel.NAME); file_name.setVisible(_pref.isColumnVisible(UIConstants.SHARED_LIST_FILE_NAME_COLUMN_ID)); file_name.setHeaderValue("File name"); file_name.setCellRenderer(new FileNameTableCellRenderer()); file_name.setComparator(new GeneralComparator("getSharingName")); table_columns.add(file_name); JMTableColumn file_size = new JMTableColumn(); file_size.setIdentifier(UIConstants.SHARED_LIST_FILE_SIZE_COLUMN_ID); file_size.setModelIndex(SharedFilesTableModel.SIZE); file_size.setVisible(_pref.isColumnVisible(UIConstants.SHARED_LIST_FILE_SIZE_COLUMN_ID)); file_size.setHeaderValue("Size"); file_size.setCellRenderer(new FileSizeTableCellRenderer()); file_size.setComparator(new GeneralComparator("length")); table_columns.add(file_size); JMTableColumn file_type = new JMTableColumn(); file_type.setIdentifier(UIConstants.SHARED_LIST_FILE_TYPE_COLUMN_ID); file_type.setModelIndex(SharedFilesTableModel.TYPE); file_type.setVisible(_pref.isColumnVisible(UIConstants.SHARED_LIST_FILE_TYPE_COLUMN_ID)); file_type.setHeaderValue("Type"); file_type.setCellRenderer(new FileTypeTableCellRenderer()); file_type.setComparator(new Comparator() { public int compare(Object o1, Object o2) { String file_type1 = FileFormatter.formatMimeType(((SharedFile)o1).getMimeType()); String file_type2 = FileFormatter.formatMimeType(((SharedFile)o2).getMimeType()); return Misc.compareAllObjects(file_type1, file_type2, "toString", true); } }); table_columns.add(file_type); JMTableColumn file_hash = new JMTableColumn(); file_hash.setIdentifier(UIConstants.SHARED_LIST_FILE_ID_COLUMN_ID); file_hash.setModelIndex(SharedFilesTableModel.HASH); file_hash.setVisible(_pref.isColumnVisible(UIConstants.SHARED_LIST_FILE_ID_COLUMN_ID)); file_hash.setHeaderValue("Hash"); file_hash.setCellRenderer(new FileHashTableCellRenderer()); file_hash.setComparator(new GeneralComparator("getFileHash")); table_columns.add(file_hash); JMTableColumn completed = new JMTableColumn(); completed.setIdentifier(UIConstants.SHARED_LIST_COMPLETED_COLUMN_ID); completed.setModelIndex(SharedFilesTableModel.COMPLETED); completed.setVisible(_pref.isColumnVisible(UIConstants.SHARED_LIST_COMPLETED_COLUMN_ID)); completed.setHeaderValue("Completed"); completed.setCellRenderer(new CompletedTableCellRenderer()); completed.setComparator(new GeneralComparator("getPercentCompleted")); completed.setComparator(new Comparator() { public int compare(Object o1, Object o2) { double completed1 = 100; double completed2 = 100; SharedFile shared_file1 = (SharedFile)o1; SharedFile shared_file2 = (SharedFile)o2; if(!shared_file1.isCompleted()) completed1 = ((PartialFile)shared_file1).getPercentCompleted(); if(!shared_file2.isCompleted()) completed2 = ((PartialFile)shared_file2).getPercentCompleted(); if(completed1 == completed2) return 0; if(completed1 > completed2) return 1; return -1; } }); table_columns.add(completed); super.buildColumns(new SharedFilesTableModel(sharedFiles)); class PopupListener extends MouseAdapter { JMenuItem column_setup; public PopupListener() { column_setup = new JMenuItem("Column setup"); } public void mousePressed(MouseEvent e) { showPopup(e); } public void mouseReleased(MouseEvent e) { showPopup(e); } private void showPopup(MouseEvent e) { if (e.isPopupTrigger()) { JPopupMenu popup_menu = new JPopupMenu(); popup_menu.add(column_setup); popup_menu.show(e.getComponent(), e.getX(), e.getY()); } } } //this.addMouseListener(new PopupListener()); } /*private SharedFile[] getFilesByIndexes(int[] indexes) { //for(int index : indexes) { // System.out.println("Index=>" + index); //} SharedFile[] result = new SharedFile[indexes.length]; int k = 0; for(int i : indexes) { int j = 0; for(Server server : _server_manager.getServers()) { if( j == this.convertRowIndexToModel(i) ) { result[k++] = server; break; } ++j; } } //for(Server server : result) { // System.out.println(server); //} return result; }*/ }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -