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

📄 fileprogressdialog.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 JAVA
字号:
/* Copyright (C) 2003 Adam Olsen 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */package com.valhalla.jbother;import com.valhalla.gui.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.table.*;import java.util.*;import javax.swing.*;import java.beans.*;import org.jivesoftware.smackx.filetransfer.*;/** * * @author synic */public class FileProgressDialog extends JFrame {    private static FileProgressDialog instance = null;    private JPanel main;    private JButton clear = new JButton("Clean Up");    private JButton close = new JButton("Close");    private JButton cancel = new JButton("Cancel");    private Component glue = Box.createVerticalGlue();    private TableModel model = new TableModel();    private JTable table = new JTable(model);    java.text.NumberFormat nf = java.text.NumberFormat.getInstance();    java.text.NumberFormat nf2 = java.text.NumberFormat.getInstance();    /** Creates a new instance of FileProgressDialog */    private FileProgressDialog() {        super("File Transfer Manager");        setIconImage(Standard.getImage("frameicon.png"));        main = (JPanel)getContentPane();        main.setLayout(new BorderLayout());        main.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));        nf.setMaximumFractionDigits(1);        nf.setMinimumFractionDigits(1);        JScrollPane scroll = new JScrollPane(table);        table.setBackground(Color.WHITE);        scroll.getViewport().setBackground(Color.WHITE);        main.add(scroll, BorderLayout.CENTER);        table.setShowGrid(false);        table.setShowHorizontalLines(true);        table.setTableHeader(null);        // get the height for each row        Window w = new Window(this);        w.setLayout(new BorderLayout());        TransferPanel tp = new TransferPanel(null,"",66, 0);        tp.bar.setValue(100);        w.add(tp, BorderLayout.CENTER);        w.pack();        table.setRowHeight(w.getHeight() + 18);        w.dispose();        TableColumn col = table.getColumnModel().getColumn(0);        col.setResizable(false);        col.setPreferredWidth(28);        col.setMaxWidth(28);        col = table.getColumnModel().getColumn(1);        col.setPreferredWidth(376);        table.setDefaultRenderer(TransferPanel.class, new CellRend());        table.setDefaultRenderer(IconLabel.class, new IconRend());        JPanel buttons = new JPanel();        buttons.setLayout(new BoxLayout(buttons, BoxLayout.X_AXIS));        buttons.add(Box.createHorizontalGlue());        buttons.add(cancel);        buttons.add(clear);        buttons.add(close);        buttons.setBorder(BorderFactory.createEmptyBorder(5,0,0,0));        close.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                setVisible(false);            }        });        clear.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                cleanup();            }        } );        cancel.addActionListener(new ActionListener()        {            public void actionPerformed(ActionEvent e)            {                int row = table.getSelectedRow();                if(row != -1)                {                    TransferPanel panel = (TransferPanel)model.getValueAt(row, 1);                    if(!panel.getDone()) panel.cancel();                }            }        } );        main.add(buttons, BorderLayout.SOUTH);        pack();        setSize(new Dimension(450, 250));        Standard.cascadePlacement(this);    }    private void cleanup()    {        ArrayList items = model.getItems();        for( int i = 0; i < items.size(); i++ )        {            TransferPanel panel = (TransferPanel)items.get(i);            if(panel.getDone())            {                model.remove(panel);                i--;            }        }    }    public static FileProgressDialog getInstance()    {        if(instance == null) instance = new FileProgressDialog();        return instance;    }    public FileProgressListener addFile(FileTransfer transfer, String name, int type, long size)    {        setVisible(true);        return new TransferPanel(transfer, name, type, size);    }    class TransferPanel extends JPanel implements FileProgressListener    {        JProgressBar bar = new JProgressBar();        private String fileName = null;        private JLabel percent = new JLabel("0%");        private int status = 3;        private int type = 0;        private IconLabel l = new IconLabel(this);        private FileTransfer transfer;        private String name;        private long size;        private long current = 0;        private long lastSize = 0;        private long last = 0;        private javax.swing.Timer rateTimer = new javax.swing.Timer(1000, new RateHandler());        private double rate = 0;        private Vector avg = new Vector();        private int counter = 0;        private boolean popShown = false;        private String tooltip = null;        public TransferPanel(FileTransfer transfer, String name, int type, long size)        {            this.type = type;            this.transfer = transfer;            this.size = size;            setLayout(new BorderLayout());            setBackground(Color.WHITE);            setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));            this.name = name;            JLabel n = new JLabel(name);            n.setToolTipText(getTooltip());            l.setToolTipText(getTooltip());            setToolTipText(getTooltip());            add(n, BorderLayout.NORTH);            bar.setToolTipText(getTooltip());            percent.setToolTipText(getTooltip());            add(bar, BorderLayout.CENTER);            add(percent, BorderLayout.SOUTH);            this.fileName = name;            if(type != 66) model.add(this);        }        public String getTooltip()        {            if(transfer == null) return "";            if(tooltip == null)            {                StringBuffer buff = new StringBuffer();                buff.append("<html><table><tr><td><b>File: </b></td><td>");                String loc = name;                if(type == 1) loc = transfer.getFileLocation();                buff.append(loc).append("</td></tr>");                if(type == 0)                {                    buff.append("<tr><td><b>To: </b></td><td>").append(transfer.getTo()).append("</td></tr>");                }                else {                    buff.append("<tr><td><b>From: </b></td><td>").append(transfer.getFrom()).append("</td></tr>");                }                String desc = transfer.getDescription();                if(desc.equals("")) desc = "None given";                buff.append("<tr><td><b>Description:</b></td><td>").append(desc).append("</td></tr>");                buff.append("</table></html>\n");                tooltip = buff.toString();            }            return tooltip;        }        class RateHandler implements ActionListener        {            public void actionPerformed(ActionEvent e)            {                double diff = current - last;                last = current;                avg.add(0, new Double(diff));                if(avg.size() > 5) avg.setSize(5);                if(avg.size() < 5) rate = diff / 1024.0;                else {                    double value = 0;                    for(int i = 0; i < avg.size(); i++)                    {                        Double d = (Double)avg.get(i);                        value += d.doubleValue();                    }                    rate = (value / avg.size()) / 1024.0;                }            }        }        public IconLabel getLabel()        {            return l;        }        public int getStatus()        {            return status;        }        public boolean getDone()        {            if(status == 4 || status == 5) return true;            else return false;        }        public void cancel() { transfer.cancel(); rateTimer.stop(); }        public void setSelected(boolean selected)        {            if(selected) setBackground(table.getSelectionBackground());            else setBackground(Color.WHITE);        }        public void update(final String event, final int percent, final long bytes)        {            if(!rateTimer.isRunning()) rateTimer.start();            if(event.equals("Transferring")) status = type;            else if(event.equals("Done")) status = 5;            else if(event.equals("Error") || event.equals("Cancelled")) status = 4;            if( status > 1 ) rateTimer.stop();            if(counter++ < 5 && status == type) return;            counter = 0;            SwingUtilities.invokeLater(new Runnable()            {               public void run()               {                   long b = bytes;                   if(bytes <= 0)                   {                       b = lastSize;                   }                   else {                       bar.setValue(percent);                   }                   lastSize = b;                   current = b;                   String transferred = nf2.format(b / 1024) + "k";                   String total = nf2.format(size / 1024) + "k";                   TransferPanel.this.percent.setText(percent + "% - " + event + " - " +                            transferred + "/" + total + " - " +   nf.format(rate) + "KB/s");                   table.repaint();                   if(status == 5 && !popShown)                   {                       popShown = true;                       NotificationPopup.showSingleton(FileProgressDialog.this, "Transfer Complete", transfer.getFileLocation(), TransferPanel.this);                   }               }            });        }    }    class CellRend extends JPanel implements TableCellRenderer    {        public Component getTableCellRendererComponent(                            JTable table, Object color,                            boolean isSelected, boolean hasFocus,                            int row, int column) {            TransferPanel panel = (TransferPanel)color;            setToolTipText(panel.getTooltip());            panel.setSelected(isSelected);            panel.validate();            return (JPanel)color;        }    }    class IconLabel extends JLabel    {        private ImageIcon up = Standard.getIcon("images/buttons/Up24.gif");        private ImageIcon down = Standard.getIcon("images/buttons/Down24.gif");        private ImageIcon error = Standard.getIcon("images/buttons/Error24.gif");        private ImageIcon wait = Standard.getIcon("images/buttons/Wait24.gif");        private ImageIcon done = Standard.getIcon("images/buttons/Done24.gif");        private TransferPanel panel;        public IconLabel(TransferPanel panel)        {            setPreferredSize(new Dimension(28, 28));            setBorder(BorderFactory.createEmptyBorder(2,2,2,2));            this.panel = panel;            setOpaque(true);        }        public void updateIcon()        {            int status = panel.getStatus();            switch(status)            {                case 0:                    setIcon(up);                    break;                case 1:                    setIcon(down);                    break;                case 4:                    setIcon(error);                    break;                case 5:                    setIcon(done);                    break;                default:                    setIcon(wait);                    break;            }        }        public void setSelected(boolean selected)        {            if(selected) setBackground(table.getSelectionBackground());            else setBackground(Color.WHITE);        }    }    class IconRend extends JPanel implements TableCellRenderer    {        public Component getTableCellRendererComponent(                            JTable table, Object color,                            boolean isSelected, boolean hasFocus,                            int row, int column) {            IconLabel panel = (IconLabel)color;            panel.setSelected(isSelected);            panel.setSelected(isSelected);            panel.updateIcon();            panel.validate();            return (JLabel)panel;        }    }    class TableModel extends AbstractTableModel    {        private ArrayList items = new ArrayList();        public synchronized void add(TransferPanel panel)        {            items.add(0, panel);            fireTableRowsInserted(items.size(), items.size());        }        public ArrayList getItems() { return items; }        public int getColumnCount() { return 2; }        public int getRowCount() { return items.size(); }        public Object getValueAt(int row, int col)        {            TransferPanel panel = (TransferPanel)items.get(row);            if(col == 0) return panel.getLabel();            else return panel;        }        public Class getColumnClass(int c)        {            if(c == 0) return IconLabel.class;            else return TransferPanel.class;        }        public synchronized void remove(TransferPanel panel)        {            int index = items.indexOf(panel);            if(index != -1) items.remove(index);            fireTableRowsDeleted(items.size(), items.size());        }    }}

⌨️ 快捷键说明

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