⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 downloadstable.java

📁 JMule是一个基于Java开发
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* *  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.Color;import java.awt.Component;import java.awt.Graphics;import java.awt.GridLayout;import java.awt.Toolkit;import java.awt.datatransfer.Clipboard;import java.awt.datatransfer.ClipboardOwner;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.io.IOException;import java.net.URL;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import javax.swing.ImageIcon;import javax.swing.JFrame;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JPopupMenu;import javax.swing.JProgressBar;import javax.swing.JTable;import javax.swing.SwingConstants;import javax.swing.table.TableCellRenderer;import org.jdesktop.swingx.table.TableColumnExt;import org.jmule.core.JMRunnable;import org.jmule.core.JMThread;import org.jmule.core.JMuleCore;import org.jmule.core.JMuleCoreFactory;import org.jmule.core.downloadmanager.DownloadManager;import org.jmule.core.downloadmanager.DownloadSession;import org.jmule.core.edonkey.impl.ED2KFileLink;import org.jmule.core.sharingmanager.Gap;import org.jmule.core.sharingmanager.GapList;import org.jmule.core.uploadmanager.UploadManager;import org.jmule.core.uploadmanager.UploadSession;import org.jmule.ui.UIConstants;import org.jmule.ui.swing.ImgRep;import org.jmule.ui.swing.SwingGUIUpdater;import org.jmule.ui.swing.SwingUtils;import org.jmule.ui.swing.maintabs.transfers.DownloadDetailsDialog;import org.jmule.ui.swing.models.DownloadTableModel;import org.jmule.ui.utils.FileFormatter;import org.jmule.ui.utils.NumberFormatter;import org.jmule.ui.utils.SpeedFormatter;import org.jmule.ui.utils.TimeFormatter;import org.jmule.util.GeneralComparator;import org.jmule.util.Misc;/** *  * @author javajox * @version $$Revision: 1.5 $$ * Last changed by $$Author: javajox $$ on $$Date: 2008/10/19 18:03:14 $$ */public class DownloadsTable extends JMTable {	JMuleCore _core = JMuleCoreFactory.getSingleton();	UploadManager _upload_manager = _core.getUploadManager();	DownloadManager _download_manager = _core.getDownloadManager();		// ================== Table cell renderers ===================		class OrderTableCellRenderer extends DownloadTableCellRenderer {		public Component getTableCellRendererComponent(JTable table, Object value,				boolean isSelected, boolean hasFocus, int row, int column) {			super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);            if(value instanceof String)            	this.setText(value.toString());			return this;		}	}		class FileNameTableCellRenderer extends DownloadTableCellRenderer {		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 = session.getSharingName();            this.setText(fn);            URL icon_url = UIConstants.getMimeURLByExtension(Misc.getFileExtension(fn));            this.setIcon(new ImageIcon(icon_url));            String size = FileFormatter.formatFileSize(session.getFileSize());            String d_speed = SpeedFormatter.formatSpeed(session.getSpeed());            String u_speed = null;            if(_upload_manager.hasUpload(session.getFileHash()))             	u_speed = SpeedFormatter.formatSpeed(_upload_manager.getUpload(session.getFileHash()).getSpeed());            else u_speed = SpeedFormatter.formatSpeed(0);            String done = NumberFormatter.formatProgress(session.getPercentCompleted());            String eta = TimeFormatter.format(session.getETA());                        String str = "<html> " +            		"<table><tr><td><img src=\"" + icon_url + "\"></td><td><b>" + fn + "</b></td><tr></table>" +            		"<hr>" +            		"<table>" +            		"<tr><td>Size</td><td>" + size + "</td></tr>" +            		"<tr><td>Done</td><td>" + done + "</td></tr>" +            		"<tr><td>Down speed</td><td>" + d_speed + "</td></tr>" +            		"<tr><td>Up speed</td><td>" + u_speed + "</td></tr>" +            		"<tr><td>ETA</td><td>" + eta + "</td></tr>" +            		"</table>" +            		"</html>";            this.setToolTipText(str);			return this;		}	}		class FileSizeTableCellRenderer extends DownloadTableCellRenderer {		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(session.getFileSize()) + " ");			return this;		}	} 		class TransferredTableCellRenderer extends DownloadTableCellRenderer {		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(session.getTransferredBytes()) + " ");			return this;		}	}		class DownloadSpeedTableCellRenderer extends DownloadTableCellRenderer {		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(SpeedFormatter.formatSpeed(session.getSpeed()) + " ");			return this;		}	}		class UploadSpeedTableCellRenderer extends DownloadTableCellRenderer {		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(_upload_manager.hasUpload(session.getFileHash()))             	this.setText(SpeedFormatter.formatSpeed(_upload_manager.getUpload(session.getFileHash()).getSpeed()) + " ");            else this.setText(SpeedFormatter.formatSpeed(0) + " ");			return this;		}	}		class PiecesTableCellRenderer  extends JPanel implements TableCellRenderer { //extends DefaultTableCellRenderer {		public Component getTableCellRendererComponent(JTable table, Object value,				boolean isSelected, boolean hasFocus, int row, int column) {			DownloadSession session = (DownloadSession)value;			this.setFileSize(session.getFileSize());			this.setGapList(session.getGapList());			this.setTransferredBytesCount(session.getTransferredBytes());			JPanel panel = new JPanel();			panel.setLayout(new GridLayout(1,1));			//panel.setBorder(javax.swing.BorderFactory.createEtchedBorder());			panel.setBorder(new javax.swing.border.LineBorder(new java.awt.Color(204, 204, 204), 1, true));			if(isSelected) {				  panel.setForeground(table.getSelectionForeground());				  panel.setBackground(table.getSelectionBackground());			} else {				  panel.setForeground(table.getForeground());				  panel.setBackground(table.getBackground());			}			this.setOpaque(true);			panel.add(this);			return panel;		}		class Pair {			private int x;			private int y;						public Pair(int x, int y) {				this.x = x;				this.y = y;			}						public int getX() {				return x;			}						public int getY() {				return y;			}						public void setX(int x) {				this.x = x;			}						public void setY(int y) {				this.y = y;			}		}				private ArrayList<Pair> pairs = new ArrayList();		private GapList gap_list;		private long file_size;		private long transferred_bytes_count;				public PiecesTableCellRenderer() {			pairs.add(new Pair(10,13));			pairs.add(new Pair(22,50));			pairs.add(new Pair(56,60));			pairs.add(new Pair(80,90));			pairs.add(new Pair(100,101));			//pairs.add(new Pair(0,1300));			this.setBackground(new Color(0,128,255));			this.setForeground(Color.BLACK);		}				public PiecesTableCellRenderer(GapList gapList, Long fileSize) {			setGapList(gapList);			setFileSize(fileSize);		}				public void setGapList(GapList gapList) {			this.gap_list = gapList;		}				public void setFileSize(Long fileSize) {			this.file_size = fileSize;		}				public void setTransferredBytesCount(long transferredBytesCount) {			this.transferred_bytes_count = transferredBytesCount;		}				public void fillRect(int x, int length) {					}				public void paint(Graphics g) {			  super.paint(g);			 			 // g = this.getGraphics();			 			 //g.drawLine(50, 50, 200, 200);			 //g.fillRect(60, 0, 10, this.getHeight());			 //g.fillRect(60+this.getWidth()-300+50, 0, this.getWidth()-300-120, this.getHeight());			 //g.fillRect(x, y, width, height)			 			// float file_size = 1300; // in bytes			 float total_length = this.getWidth();			 float pixels_for_byte = total_length / (float)file_size; 			 			 g.setColor(Color.WHITE);			 		     g.fillRect(0, 0, this.getWidth(), 4);			 		     g.setColor(new Color(0,100,199)); // black blue		     		     g.fillRect(0, 0, Math.round((transferred_bytes_count * this.getWidth())/file_size), 4);		     

⌨️ 快捷键说明

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