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

📄 mainframe.java~15~

📁 多线程下载器。该小程序模范迅雷等下载器的下载原理实现多线程下载
💻 JAVA~15~
字号:
package ui;
import com.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.swing.*;
import javax.swing.table.*;

/**
 * <p>Title: </p>
 *
 * <p>Description: </p>
 *
 * <p>Copyright: Copyright (c) 2009</p>
 *
 * <p>Company: </p>
 *
 * @author not attributable
 * @version 1.0
 */
public class MainFrame extends JFrame {
    ArrayList downTasks = new ArrayList();
    ArrayList downInfos = new ArrayList();
    JPanel contentPane;
    JButton btnAddTask = new JButton();
    JButton btnDeleteTask = new JButton();
    JButton btnPause = new JButton();
    JButton btnRestart = new JButton();
    JTable jTable1 = new JTable();
    Object [] columnsName = new Object[]{"文件名","进度","速度","状态","线程数"};
    DefaultTableModel model = new DefaultTableModel(columnsName,256);
    JScrollPane jScrollPane1 = new JScrollPane();
    int row = 0;
    public MainFrame() {
        try {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            jbInit();
        } catch (Exception exception) {
            exception.printStackTrace();
        }
    }

    /**
     * Component initialization.
     *
     * @throws java.lang.Exception
     */
    private void jbInit() throws Exception {

        contentPane = (JPanel) getContentPane();
        contentPane.setLayout(null);
        setSize(new Dimension(600, 350));
        setTitle("MyDownloader下载");
        this.setResizable(false);
        btnAddTask.setBounds(new Rectangle(15, 24, 81, 23));
        btnAddTask.setText("新建任务");
        btnAddTask.addActionListener(new MainFrame_btnAddTask_actionAdapter(this));
        btnDeleteTask.setBounds(new Rectangle(142, 24, 81, 23));
        btnDeleteTask.setText("删除任务");
        btnPause.setBounds(new Rectangle(269, 24, 81, 23));
        btnPause.setText("暂停");
        btnRestart.setBounds(new Rectangle(391, 24, 81, 23));
        btnRestart.setText("开始");
        jScrollPane1.setBounds(new Rectangle(23, 67, 551, 201));
        contentPane.add(btnAddTask);
        contentPane.add(btnDeleteTask);
        contentPane.add(btnPause);
        contentPane.add(btnRestart);
        contentPane.add(jScrollPane1);
        jScrollPane1.getViewport().add(jTable1);

        this.jTable1.setModel(model);

    }

    public void btnAddTask_actionPerformed(ActionEvent actionEvent) {
        AddTaskFrame frame = new AddTaskFrame(this);
        frame.setVisible(true);
    }

    public void addTask() {
        /*TableColumn column = this.jTable1.getColumnModel().getColumn(1);
        column.setCellRenderer(new ProgressRenderer());
        model.setValueAt(new Integer(0), row, 1);
                final int row=this.row;
                new Thread() {
                    public void run() {
                        int i = 0;
                        while (true) {
                            model.setValueAt(new Integer(i), row,1);
                            try {
                                sleep(100);
                            } catch (InterruptedException ex) {
                            }
                            i++;
                            if (i > 100) {
                                break;
                            }
                        }
                    }
                }.start();
                this.row++;
*/
        DownloadInfo downInfo = (DownloadInfo)downInfos.get(downInfos.size()-1);
        model.setValueAt(downInfo.getFilename(),row,0);
        model.setValueAt(0,row,1);
        TableColumn column = this.jTable1.getColumnModel().getColumn(1);
        column.setCellRenderer(new ProgressRenderer());
        model.setValueAt(0,row,2);
        model.setValueAt("下载中",row,3);
        model.setValueAt(downInfo.getThreadNum(),row,4);
        row++;
        DownloadTask task = new DownloadTask(downInfo);
        Thread thread = new Thread(task);
        thread.start();
    }

    class ProgressRenderer extends DefaultTableCellRenderer {
        private JProgressBar b = new JProgressBar(0, 100);

        public Component getTableCellRendererComponent(JTable table,
                Object value,
                boolean isSelected, boolean hasFocus, int row, int column) {
            Integer i = (Integer) value;
            if (i == null) {
                return null;
            }
            if (i < 100) {
                b.setValue(i);
                b.setStringPainted(true);
                b.setString(i + "%");
                return b;
            } else if (i >= 100) {
                b.setString("完成");
            }

            String text = "完成";

            super.getTableCellRendererComponent(table, text, isSelected,
                                                hasFocus,
                                                row, column);
            return this;
        }
    }


    public void setDownInfos(ArrayList downInfos) {
        this.downInfos = downInfos;
    }

    public ArrayList getDownInfos() {
        return downInfos;
    }


}


class MainFrame_btnAddTask_actionAdapter implements ActionListener {
    private MainFrame adaptee;
    MainFrame_btnAddTask_actionAdapter(MainFrame adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent actionEvent) {
        adaptee.btnAddTask_actionPerformed(actionEvent);
    }
}

⌨️ 快捷键说明

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