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

📄 mainwindow.java

📁 一个简单的多线程下载程序
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
package com.network.flashget;

import javax.swing.*;
import javax.swing.border.*;
import javax.swing.tree.*;
import javax.swing.table.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.event.*;
import java.net.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class MainWindow extends JFrame//implements ActionListener
{
	JPanel panelTotal = new JPanel();
	JPanel panelLeft = new JPanel();
	JPanel panelRight = new JPanel();
	JPanel panelRightTop = new JPanel();
	static JPanel panelRightBottom = new JPanel();
	static JPanel subPanel = new JPanel();
	JTextField txt = new JTextField("就绪");
	CardLayout topCard = new CardLayout();	
	static CardLayout bottomCard = new CardLayout();
	static LinkedList runningList = new LinkedList();
	static LinkedList statusList = new LinkedList();
	boolean gridFlag = false;
	boolean detailFlag = true;
	boolean logoFlag = true;
	boolean tableDownFlag = true;
	boolean tableFinishedFlag = false;
	boolean tableDeletedFlag = false;
	static int index = 0;
	static int currentIndex = 0;
	Logo logo = null;
	
	JSplitPane jspLeft=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
	JSplitPane jspRight=new JSplitPane(JSplitPane.VERTICAL_SPLIT);
	
	//定义表状控件-------------------------------------------------------	 
	static JTable tableDown = null;
	JScrollPane jscrDown = null;
   	static DefaultTableModel tableDownModel = null;
   	String[] tableDownName = {"状态", "文件名","文件长度", "完成数", "百分比", "存取路径", "块数", "URL"};
    String[][] dataDown = new String[0][8];
    
    //定义表状控件-------------------------------------------------------	 
	static JTable tableDownDetail = null;
	JScrollPane jscrDownDetail = null;
   	static DefaultTableModel tableDownDetailModel = null;
   	String[] tableDownDetailName = {"线程", "文件名", "起始点", "终止点", "完成数", "URL"};
    String[][] dataDownDetail = new String[10][6];
    
    
	JTable tableFinished;
	JScrollPane jscrFinished = null;
    static DefaultTableModel tableFinishedModel = null;
    String[] tableFinishedName = {"状态", "文件名", "大小","注释"};
    String[][] dataFinished = new String[0][4];
    
	JTable tableFinishedDetail;
	String[] tableFinishedDetailName = {"名称", "值"};
	static DefaultTableModel tableFinishedDetailModel = null;
	JScrollPane jscrFinishedDetail = null;
    String[][] dataFinishedDetail = 
    	{
    		{"*注释",""},{"*引用页",""},{"*续传",""},{"*本地文件",""},
    		{"*大小",""},{"*完成",""},{"*URL",""}    	
		};
		
	JTable tableDeleted;
	JScrollPane jscrDeleted = null;
    static DefaultTableModel tableDeletedModel = null;
    String[] tableDeletedName = {"状态", "文件名", "大小","注释"};
    String[][] dataDeleted = new String[0][4];
    
	static JTable tableDeletedDetail;
	String[] tableDeletedDetailName = {"名称", "值"};
	static DefaultTableModel tableDeletedDetailModel = null;
	JScrollPane jscrDeletedDetail = null;
    String[][] dataDeletedDetail = 
    	{
    		{"*注释",""},{"*引用页",""},{"*续传",""},{"*本地文件",""},
    		{"*大小",""},{"*完成",""},{"*URL",""}   	
		};

	//表状控件定义结束-----------------------------------------------------------
		
	//定义树状组件-----------------------------------------------------------------
	JTree tree;
	DefaultTreeModel model;
	DefaultMutableTreeNode root, child0, child1,child2;
	//树状控件定义结束--------------------------------------------------------
	
	//定义菜单组件---------------------------------------
	JPopupMenu popUp = new JPopupMenu();
	JMenuBar menuBar = new JMenuBar();
	JMenu[] menus = {new JMenu("文件"),new JMenu("察看"),
					 new JMenu("任务"),new JMenu("搜索"),
					 new JMenu("帮助")
					};
	JMenuItem popMenuItems[] = 
					{new JMenuItem("开始"),new JMenuItem("暂停"),
					 new JMenuItem("全部开始"),new JMenuItem("全部暂停"),
					 new JMenuItem("重新添加到下载列表"),new JMenuItem("删除"),
					 new JMenuItem("退出")
					};
	JMenuItem[][] items = 
		{
    	 	{new JMenuItem("新建数据库"), new JMenuItem("打开旧数据库"),
    		},
    		{new JMenuItem("详细情况"),new JMenuItem("悬浮窗"), 
    		 new JMenuItem("网格") 
    		},
    		{new JMenuItem("新建任务"),new JMenuItem("全部开始"), 
    		 new JMenuItem("全部暂停") 
    		},
    		{new JMenuItem("MP3"),new JMenuItem("软件"), 
    		 new JMenuItem("游戏") 
    		},
    		{new JMenuItem("用户手册"),new JMenuItem("关于QuickShare")
    		}
    	};
    //菜单控件定义结束--------------------------------------------------------
    		
	JToolBar toolBar;
	static int taskCount = 0;
	static LinkedList taskDownList = new LinkedList();
	static LinkedList taskFinishedList = new LinkedList();
	static LinkedList taskDeletedList = new LinkedList();
	
	MainWindow()
	{
		this.addWindowListener(new Windowclose());
		int width = (int)Toolkit.getDefaultToolkit().getScreenSize().getWidth()-100;
		int height = (int)Toolkit.getDefaultToolkit().getScreenSize().getHeight()-100;
		this.setSize(width,height);
		this.setTitle("QuickShare");
		logo = new Logo();
		
		panelTotal.setBackground(Color.white);
		panelLeft.setBackground(Color.white);
		panelRight.setBackground(Color.white);
		panelRightTop.setBackground(Color.white);
		panelRightBottom.setBackground(Color.white);
		
		txt.setBackground(Color.LIGHT_GRAY);
		txt.setEditable(false);
		
		//构造树状控件-------------------------------------------------------------
		root = new DefaultMutableTreeNode("QuickShare");
		tree = new JTree(root);
		model = (DefaultTreeModel)tree.getModel();
		child0 = new DefaultMutableTreeNode("正在下载");
		child1 = new DefaultMutableTreeNode("已下载");
		child2 = new DefaultMutableTreeNode("已删除");
		model.insertNodeInto(child2, root, 0);
		model.insertNodeInto(child1, root, 0);
		model.insertNodeInto(child0, root, 0);
		//树状控件构造结束------------------------------------------------------------
	
		
		//构造Table控件------------------------------------------------------------------
        tableDownModel = new DataModel(dataDown, tableDownName);
        tableDown =new JTable(tableDownModel);
        tableDown.setBackground(Color.white);
        tableDown.setSelectionBackground(new Color(100,150,250));
        tableDown.setGridColor(Color.pink);
        tableDown.setShowGrid(false);
        tableDown.setPreferredSize(new Dimension(700,600));
        jscrDown = new JScrollPane(tableDown,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		
		tableDownDetailModel = new DataModel(dataDownDetail, tableDownDetailName);
        tableDownDetail =new JTable(tableDownDetailModel);
        tableDownDetail.setBackground(Color.white);
        tableDownDetail.setGridColor(Color.pink);
        tableDownDetail.setShowVerticalLines(false);
        tableDownDetail.setEnabled(false);
        tableDownDetail.setPreferredSize(new Dimension(700,600));
        jscrDownDetail = new JScrollPane(tableDownDetail,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		
		tableFinishedModel = new DataModel(dataFinished, tableFinishedName);
        tableFinished =new JTable(tableFinishedModel);
        tableFinished.setBackground(Color.white);
        tableFinished.setSelectionBackground(new Color(100,150,250));
        tableFinished.setGridColor(Color.pink);
        tableFinished.setShowGrid(false);
        tableFinished.setPreferredSize(new Dimension(700,600));
        jscrFinished = new JScrollPane(tableFinished,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		
		tableFinishedDetailModel = new DataModel(dataFinishedDetail,tableFinishedDetailName);
		tableFinishedDetail = new JTable(tableFinishedDetailModel);
		tableFinishedDetail.setGridColor(Color.pink);
        tableFinishedDetail.setPreferredSize(new Dimension(700,600));	
		jscrFinishedDetail = new JScrollPane(tableFinishedDetail,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		
		tableDeletedModel = new DataModel(dataDeleted, tableDeletedName);
        tableDeleted =new JTable(tableDeletedModel);
        tableDeleted.setBackground(Color.white);
        tableDeleted.setSelectionBackground(new Color(100,150,250));
        tableDeleted.setPreferredSize(new Dimension(700,600));
        jscrDeleted = new JScrollPane(tableDeleted,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		tableDeletedDetailModel = new DataModel(dataDeletedDetail,tableDeletedDetailName);
		tableDeletedDetail = new JTable(tableDeletedDetailModel);
		tableDeleted.setSelectionBackground(new Color(100,150,250));
        tableDeleted.setShowVerticalLines(false);
        tableDeleted.setPreferredSize(new Dimension(700,600));	
		jscrDeletedDetail = new JScrollPane(tableDeletedDetail,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);

		//Table控件构造结束------------------------------------------------------------------

		//构造菜单控件-----------------------------------------------------------------------
		for(int i = 0; i < menus.length; i++) 
		{
			for(int j = 0;j<items[i].length;j++)
			{
      			menus[i].add(items[i][j]);
      			items[i][j].addActionListener(new MenuItemListener());
    		}
    	}
    	for(int i = 0; i < menus.length; i++)
      	{
      		menuBar.add(menus[i]);
    	}
    	menus[0].addSeparator();
    	JMenuItem m = new JMenuItem("退出");
    	m.addActionListener(new MenuItemListener());
    	menus[0].add(m);
    	this.setJMenuBar(menuBar);
    	
    	for(int i = 0;i < popMenuItems.length-1;i++)
    	{
    		popMenuItems[i].addActionListener(new PopupActionListener());
    		popUp.add(popMenuItems[i]);
    	}
    	popUp.addSeparator();
    	popMenuItems[popMenuItems.length-1].addActionListener(new PopupActionListener());
    	popUp.add(popMenuItems[popMenuItems.length-1]);
    	
    	//构造菜单控件结束---------------------------------------------------------
    	
		//-------设置窗口位置居中---------------------------------------------------------------        
        int locationX=(int)(Toolkit.getDefaultToolkit().getScreenSize().getWidth()-getSize().getWidth())/2; 
        int locationY=(int)(Toolkit.getDefaultToolkit().getScreenSize().getHeight()-getSize().getHeight())/2;
        setLocation(locationX,locationY);
        //-------------------------------------------------------------------------------------- 

		Container cp = getContentPane();
		cp.setLayout(new BorderLayout());
		cp.add(panelTotal,"Center");
		cp.add(txt,"South");
		
		//设置右上角组件------------------------------------------------------------
		panelRightTop.setLayout(topCard);
		panelRightTop.add(jscrDown,"down");
		panelRightTop.add(jscrFinished,"finished");
		panelRightTop.add(jscrDeleted,"deleted");
		//设置结束-------------------------------------------------------------------
		
		//设置右下角组件-------------------------------------------------------------
		panelRightBottom.setLayout(bottomCard);
		panelRightBottom.add(subPanel,"default");
		panelRightBottom.add(jscrFinishedDetail,"finished");
		panelRightBottom.add(jscrDownDetail,"down");
		panelRightBottom.add(jscrDeletedDetail,"deleted");
		//设置结束--------------------------------------------------------------------
		
		panelTotal.setLayout(new BorderLayout());
		panelTotal.add(jspRight);
		panelTotal.add(jspLeft);

		jspLeft.add(tree);		
		jspLeft.setRightComponent(jspRight);
		
		jspRight.setTopComponent(panelRightTop);
		jspRight.setBottomComponent(panelRightBottom);
		jspRight.setDividerLocation(350);
		
		tree.addMouseListener(new TreeListener());
		tableDown.addMouseListener(new TableListener());
		tableFinished.addMouseListener(new TableListener());
		tableDeleted.addMouseListener(new TableListener());
		
		tableDown.addMouseListener(new PopupListener());
		tableFinished.addMouseListener(new PopupListener());
		tableDeleted.addMouseListener(new PopupListener());
		this.show();						
	}
	
	/**
	 *用于关闭窗口时,能够关闭程序
	 **/
	class Windowclose  extends WindowAdapter    
    {		
        public void windowClosing(WindowEvent we)
        {
        	dispose();
        	exitSave();
        	    	    
    		System.exit(0);	       	
        }    	
    }
    
    public static void main(String[] args)
    {
    	//设置风格外观-------------------------------------------------------    	
    	try
  		{
  			String look = UIManager.getSystemLookAndFeelClassName();
  			UIManager.setLookAndFeel(look);
  		}
  		catch(Exception e)
  		{
  			e.printStackTrace();
  		}
    	new MainWindow();
  		
  		//读取文件------------------------------------------------------------
  		LoadFile load = new LoadFile(0);
    	load.loadInfo();
    	load.addToTabel();
    	
    	File file = new File(".\\Info\\index.txt");
    	if(file.exists())
    	{
    	    load.loadIndex();
  			System.out.println("index"+index);
    	}   	    
    	System.out.println(taskFinishedList.size());   
    }
    
    
    /**
     *树状组件事件侦听
     **/
    class TreeListener implements MouseListener
    {
    	public void mouseClicked(MouseEvent e)
    	{
    		DefaultMutableTreeNode clicked = (DefaultMutableTreeNode)tree.getLastSelectedPathComponent();
    		if(clicked.equals(root))
    		{
    			//
    		}
    		if(clicked.equals(child0))
    		{
    			topCard.show(panelRightTop,"down");
    			tableDown.clearSelection();
    			bottomCard.show(panelRightBottom,"default");
    			
    			tableDownFlag = true;
    			tableFinishedFlag = false;
    			tableDeletedFlag = false;
    		}
    		
    		if(clicked.equals(child1))
    		{
    			topCard.show(panelRightTop,"finished");
    			tableFinished.clearSelection();
    			bottomCard.show(panelRightBottom,"default");
    			
    			tableDownFlag = false;
    			tableFinishedFlag = true;
    			tableDeletedFlag = false;
    		}
    		
    		if(clicked.equals(child2))
    		{

⌨️ 快捷键说明

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