java多线程下载工具(二)
2012-03-29 17:26
232 查看
2、资源列表(JTable)的实现,
这是整个主界面的重点也是难点!!!我将尽可能的详细介绍,希望能够将清楚。
由于jTable中的每一列的数据(状态、进度、下载速度、已下载、已用时间、剩余时间)都是动态的,所以这里也需要设置渲染器,而且进度条的渲染器与其他列的不同。
首先设这进度条的渲染器:
/** * 进度条渲染器,它继承于JProgressBar并实现TableCellRenderer,表示这个类是一个进度条,同是也是一个列表的渲染器。 */ public class DownloadProgressBar extends JProgressBar implements TableCellRenderer { public DownloadProgressBar() { super(0, 100); this.setStringPainted(true); this.setForeground(Color.green); // TODO Auto-generated constructor stub } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // TODO Auto-generated method stub Float floatValue=Float.parseFloat(value.toString()); int intValue=(int)floatValue.floatValue(); this.setValue(intValue); this.setString(value.toString()+"%"); return this; } }
其他列的渲染器:
/* * 其他列(除开进度条)的渲染器 */ @SuppressWarnings("serial") public class DownloadTableCellRenderer extends DefaultTableCellRenderer { public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { // 判断是否需要显示图片 if (value instanceof Icon) this.setIcon((Icon) value); else this.setText(value.toString()); // 判断是否选中 if (isSelected) super.setBackground(table.getSelectionBackground()); else setBackground(table.getBackground()); // 设置居中 this.setHorizontalAlignment(JLabel.CENTER); this.setToolTipText(value.toString()); return this; } }
设置好每一列的渲染器之后,我们就可以来根据每一列指定相应的渲染器:
//设置列宽 this.getColumn(DownloadTableModel.ID_COLUMN).setMinWidth(0); this.getColumn(DownloadTableModel.ID_COLUMN).setMaxWidth(0); this.getColumn(DownloadTableModel.STATE_COLUMN).setMaxWidth(40); this.getColumn(DownloadTableModel.FILE_NAME_COLUMN).setMinWidth(200); this.getColumn(DownloadTableModel.FILE_SIZE_COLUMN).setMinWidth(60); this.getColumn(DownloadTableModel.PLAN_COLUMN).setMinWidth(180); this.getColumn(DownloadTableModel.SPEED_COLUMN).setMinWidth(50); this.getColumn(DownloadTableModel.HAS_DOWN_COLUMN).setMinWidth(50); this.getColumn(DownloadTableModel.COST_TIME_COLUMN).setMinWidth(50); this.getColumn(DownloadTableModel.SPARE_TIME_COLUMN).setMinWidth(50); //设置单元格渲染 this.getColumn(DownloadTableModel.STATE_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); this.getColumn(DownloadTableModel.FILE_NAME_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); this.getColumn(DownloadTableModel.FILE_SIZE_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); this.getColumn(DownloadTableModel.PLAN_COLUMN).setCellRenderer( new DownloadProgressBar()); this.getColumn(DownloadTableModel.SPEED_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); this.getColumn(DownloadTableModel.HAS_DOWN_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); this.getColumn(DownloadTableModel.COST_TIME_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); this.getColumn(DownloadTableModel.SPARE_TIME_COLUMN).setCellRenderer( new DownloadTableCellRenderer()); //去掉表格的线 setShowVerticalLines(false);
在下载的过程中,许多的数据都是不停的变化的,所以我们可以设计一个类来负责处理数据:
/* * 许多的数据都是在不停的变化的,因此提供TableModel来负责处理列表中的数据。 */ public class DownloadTableModel extends DefaultTableModel { //定义每一列的名称 public final static String ID_COLUMN = "id"; public final static String STATE_COLUMN = "状态"; public final static String FILE_NAME_COLUMN = "文件名称"; public final static String FILE_SIZE_COLUMN = "文件大小"; public final static String PLAN_COLUMN = "进度"; public final static String SPEED_COLUMN = "下载速度"; public final static String HAS_DOWN_COLUMN = "已下载"; public final static String COST_TIME_COLUMN = "已用时间"; public final static String SPARE_TIME_COLUMN = "剩余时间"; public DownloadTableModel() { // TODO Auto-generated constructor stub super(); } //定义一个columnNamespace数组根据列名操作每一列。 private static final String[] columnNames = { ID_COLUMN, STATE_COLUMN, FILE_NAME_COLUMN, FILE_SIZE_COLUMN, PLAN_COLUMN, SPEED_COLUMN, HAS_DOWN_COLUMN, COST_TIME_COLUMN, SPARE_TIME_COLUMN }; @Override public int getColumnCount() { // TODO Auto-generated method stub return columnNames.length; } @Override public String getColumnName(int col) { // TODO Auto-generated method stub return columnNames[col]; } @Override public int getRowCount() { // TODO Auto-generated method stub return 0; } @Override public Object getValueAt(int row, int column) { // TODO Auto-generated method stub String columnName = this.getColumnName(column); // 对列名进行判断,再返回相应的数据 return super.getValueAt(row, column); } }
一下是主界面中创建Jtable的方法:
/** * 创建资源列表,主下载界面 通过swing测试发现创建table的方法 * * @author Administrator */ private void createTable() { // TODO Auto-generated method stub DownloadTableModel tableModel = new DownloadTableModel(); this.downloadTable = new DownloadTable(); this.downloadTable.setModel(tableModel); this.downloadTable.setTableFace(); }
不知大家是否明白?我自己都有点晕了,往下就是JTOOLBar和JList的实现,由于这两个比JTable和Jtree都简单,这里不再做介绍,
等完成后面的功能之后还会继续更新!!!!
相关文章推荐
- Java多线程下载工具(四)
- Java多线程下载工具(五)——任务栏图标设置
- java多线程下载工具(三)
- java多线程下载工具(一)
- 几种Java性能工具的事儿
- Java之颜色工具-yellowcong
- java群组通讯工具JGroups 2.2.9 Final 发布
- 关于使用中文分词工具ICTCLAS2013 Java版本乱码的问题
- java高仿新浪微博短链接地址生成工具ShortUrlGenerator.java
- 7 款开源 Java 反编译工具
- Java定时任务调度工具详解之Timer篇
- java 计时工具 用户性能测试
- Java工具安装和环境配置
- java项目生成安装文件(工具为exe4j、Inno setup,有工具连接)
- Java定时任务调度工具详解之Quartz
- Java开发工具大全[1]
- Java开发工具大全[14]
- java 时间类 工具
- JAVA工具类(3) ---使用excel工具类导出对象
- 云计算仿真工具中文注释DatacenterCharacteristics.java