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

📄 xdowntable.java

📁 仿迅雷下载器,http下载,多线程.多任务
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		
	
	/**
	 * 已下载任务信息表.
	 * @return
	 */
	public JTable taskComplete()
	{
		//空的表.
		JTable downLoadInfo=new XDownTable().createJTable(this.getNullVector(),0);
	
		//表可以被改变宽度,但不能拖走.
		downLoadInfo.getTableHeader().setReorderingAllowed(false);
		TableColumnModel tc=downLoadInfo.getColumnModel();
		
		//列的宽度控制.//525宽
		tc.getColumn(0).setPreferredWidth(50);
		tc.getColumn(0).setMinWidth(30);
		tc.getColumn(1).setPreferredWidth(210);
		tc.getColumn(1).setMinWidth(120);
		tc.getColumn(2).setPreferredWidth(70);
		tc.getColumn(2).setMinWidth(30);
		tc.getColumn(3).setMinWidth(30);
		tc.getColumn(4).setMinWidth(50);
		tc.getColumn(5).setMinWidth(50);
		tc.getColumn(6).setPreferredWidth(80);
		tc.getColumn(6).setMinWidth(60);
		
		
		downLoadInfo.setGridColor(new Color(226, 238, 249));
		
		//表头.
		JTableHeader downTableHeader= downLoadInfo.getTableHeader();
		
		//表头有下边框
		downTableHeader.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray));
		
		//构造单元格的渲染器.
		DefaultTableCellRenderer dtc=new DefaultTableCellRenderer();
		
		//设置背景色与容器背景色一致.
		dtc.setBackground(new Color(226, 238, 249));
		//将表头设置成此渲染器.
		downTableHeader.setDefaultRenderer(dtc);
		
		//保存对象.
		SaveRunTime.setDOWN_INFOTABLE(downLoadInfo);
		return downLoadInfo;
	}
	
	
	
	/**
	 * 构造一张表 18.7 type值为0或者1,为0时传递一个空的Vector.
	 */
	@SuppressWarnings("unchecked")
	public JTable createJTable(Vector<Vector> vc,int type)
	{
		Object[][]obj=new Object[18][7];
		String [] str1= new String []{"状态", "文件名称", "进度", "速度","剩余时间", "用时", "文件类型",};
		
		if(type==1)
		{
			for(int i=0;i<vc.size();i++)
			{
				Vector<Object> vcc=(Vector<Object>)vc.get(i);
				if("-3".equals(vcc.get(0)))
				{	
					vcc.remove(0);
					vcc.insertElementAt(this.getImageIcon("/image/dpause.png"), 0);
				}
				else if("-1".equals(vcc.get(0)))
				{
					vcc.remove(0);
					vcc.insertElementAt(this.getImageIcon("/image/die.png"), 0);
				}
				vcc.trimToSize();
				String str="";//避免等于null
				if("".equals(vcc.get(5))==false)
				{//避免""解析时抛出异常.
					str=new DownLoad().new CounterThread().getTime(Long.parseLong((String)vcc.get(5)));
				}
				obj[i][0]=vcc.get(0);
				obj[i][1]=vcc.get(1);
				obj[i][2]=vcc.get(2);
				obj[i][3]=vcc.get(3);
				obj[i][4]=vcc.get(4);
				obj[i][5]=str;
				obj[i][6]=vcc.get(6);	//表格只得到Vector的前七个值.
			}
		}
		else if(type==0)
		{
			Vector<Object> vcc=(Vector<Object>)vc.get(0);
			obj[0][0]=vcc.get(0);
			obj[0][1]=vcc.get(1);
			obj[0][2]=vcc.get(2);
			obj[0][3]=vcc.get(3);
			obj[0][4]=vcc.get(4);
			obj[0][5]=vcc.get(5);
			obj[0][6]=vcc.get(6);
		}
		return new newJTable(obj,str1);
	}
	
	
	
	/**
	 * 加载从xml文件中得到的Vector,如果为空,则返回一个带 "" 的Vector
	 * 程序最早运行时由getJTable()调用.
	 * @return
	 */
	public Vector<Vector> getVector()
	{
		try
		{	//读取xml文件.
			Vector<Vector> V=new XmlOperation().readTaskInfo();
			if(V.size()!=0)
			{
				SaveRunTime.getNEWTASK().setRow(V.size());//行索引值等于历史记录个数.
				SaveRunTime.setXML_VC(V);
				this.loadHistoryTask(V); //加载历史记录.
				return V;
			}
			else//可能没有历史记录.
			{
				return this.getNullVector();
			}
		} catch (Exception e)
		{
			e.printStackTrace();
			//读xml文件得到异常时,也返回一个空的Vector
			return this.getNullVector();
		}
	}
	
	
	
	/**
	 * 加载历史记录.程序最早运行时由getVecotr()调用.
	 * @param V
	 */
	private void loadHistoryTask(Vector<Vector> V)
	{
		
		//加载历史任务,并为集合类中添加锁.
		List<Object> list=SaveRunTime.getLIST();
		List<Object> timeList=SaveRunTime.getTIMELIST();
		List<HashMap<String,String>> testHashMap=SaveRunTime.getSAVE_HASHMAP();
		for(int i=0;i<V.size();i++)
		{
			String url=(String)V.get(i).get(8);
			String fileDirectory=(String)V.get(i).get(7);
			String fileName=(String)V.get(i).get(1);
			long point=this.TestFile((String)V.get(i).get(1));
			
			//索引8对应xml中的url,7对应fileDirstory,1对应fileName,最后一是point
			DownLoad downLoad=new DownLoad(i,url,fileDirectory,fileName,point);
			
			//最早加载历史任务时,设置任务运行状态,只分为暂停和断开.
			downLoad.setDownLoadSign(Integer.parseInt((String)V.get(i).get(0)));
			downLoad.second=Long.parseLong((String)V.get(i).get(5));//已用时间.
			
			list.add(downLoad);//添加锁.
			HashMap<String,String> hm=new HashMap<String,String>(7);
			hm.put("正在获取链接...","");
			hm.put("文件名称",fileName);
			if("0".equals(V.get(i).get(9)))
			{
				hm.put("文件长度","未知");						//添加键值对.
			}
			else
			{
				hm.put("文件长度",(String)V.get(i).get(9));
			}
			hm.put("文件类型",(String)V.get(i).get(6));
			hm.put("保存路径",fileDirectory+fileName);
			hm.put("链接地址",url);
			hm.put("对方主机",(String)V.get(i).get(10));
			testHashMap.add(hm);
			
			timeList.add(downLoad.new CounterThread()); //添加计时线程锁.
		}
	}
	
	
	/**
	 * 构造一个空的Vector,便于构造一个空的表格.
	 * @return
	 */
	public Vector<Vector> getNullVector()
	{
		Vector<Vector> VC=new Vector<Vector>();
		Vector<String> vc=new Vector<String>();

		vc.add("");
		vc.add("");
		vc.add("");
		vc.add("");
		vc.add("");
		vc.add("");
		vc.add("");
		VC.add(vc);
		return VC;
	}
	
	
	
	
	/**
	 * 构造一张图片.
	 * @param ImageFile
	 * @return
	 */
	public ImageIcon getImageIcon(String ImageFile)
	{
		return new ImageIcon(getClass().getResource(ImageFile));
	}

	
	/**
	 * 测试给定的文件是否存在,并返回其长度,如果不存在,返回0;
	 * @param filePath
	 * @return
	 */
	public long TestFile(String filePath)
	{
		File file=new File(filePath);
		return file.exists()?file.length():0;
	}

	
}


/**
 * 
 * 继承自JTable,重写其中一个构造子.便于显示图片.由createJTable()方法调用.
 *
 */

class newJTable extends JTable
{
	private static final long serialVersionUID = -2814919364264878274L;
	public newJTable(final Object[][] rowData, final Object[] columnNames)
	{
		super(new AbstractTableModel()
		{
			private static final long serialVersionUID = 8551282884032184155L;
			public String getColumnName(int column)
			{ 
				return columnNames[column].toString(); 
			}
			public int getRowCount()
			{ 
				return rowData.length; 
			}
			public int getColumnCount() 
			{ 
				return columnNames.length;
			}
			public Object getValueAt(int row, int col)
			{
				return rowData[row][col];
			}

			//将isCellEditable的默认返回值设为false,即不可编辑.
			public boolean isCellEditable(int row, int column) 
			{ 
				//return true;
				return false;
			}
			public void setValueAt(Object value, int row, int col)
			{
				rowData[row][col] = value;
				fireTableCellUpdated(row, col);

			}
			//重写AbstractTableModel的方法,
			public Class<?> getColumnClass(int col)
			{
				//return Object.class;
				return rowData[0][col].getClass();
			}  
			 
		});
		this.setDragEnabled(false);
	}
	
}






















⌨️ 快捷键说明

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