📄 downloadstable.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.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 + -