如迅雷尔

来源:互联网 发布:网络直销是是骗局吗 编辑:程序博客网 时间:2024/05/02 04:36

这两天忙里偷闲,写了一个部门功能类型迅雷的.但还不是非常全.

现在就把个人的一些心得与大家分享一下:

 首先是界面设计上:

   从整个界面可以看出这是由JTree,JTable这两个相对来说比较重量级的组件组成.

  所以了两个函数一个用于创建JTree,另一个用于创建JTable

其部分代码如下:

 1.JT

 /**
     * initJTree(构造JTree)
     
*/

    
private JTree createJTree(final CardLayout cardLayout1, final JPanel leftJP) {
        DefaultMutableTreeNode top 
= new DefaultMutableTreeNode();
        top.setUserObject(
new JtreeNode(XUN_LEI, Pic.crateIcon("jtree/root.png"), "下载"));
        MyMutableTreeNode.createNode(top);
        JTree jtree 
= new JTree(top);
        jtree.addTreeSelectionListener(
new TreeSelectionListener() {

            @Override
            
public void valueChanged(TreeSelectionEvent e) {
                TreePath path 
= e.getPath();
                
if (path != null{
                    DefaultMutableTreeNode node 
= (DefaultMutableTreeNode) path.getLastPathComponent();
                    JtreeNode jtreeNode 
= (JtreeNode) node.getUserObject();
                    
switch (jtreeNode.getType()) {
                        
case ON_DOWN:
                            cardLayout1.show(leftJP, 
"正在下载");
                            
break;
                        
case BEEN_DOWNED:
                            cardLayout1.show(leftJP, 
"已下载");
                            
break;
                        
case DUSTBIN:
                            cardLayout1.show(leftJP, 
"垃圾箱");
                            
break;
                    }

                }

            }

        }
);
        jtree.setCellRenderer(
new MyJTreeCellRenderer());
        
return jtree;
    }

 

 MyJTreeCellRenderer是自己定义的渲染器,实现接口AbstractTableCellRenderer

 

 

2.JTable

 

 

 /**
     * crate The Three JTable
     
*/

    
private JTable crateJTable(int type) {
        JTable jtable 
= null;
        
switch (type) {
            
case ON_DOWN:
                String[] ondownStr 
= {"状态""文件名称""文件大小""进度""速度""资源""剩余时间""用时""文件类型"};
                
int[] ondownIn = {40100100200405080100400};
                jtable 
= new JTable(new OndownTableModel(allTaskManager.getSubTask(ON_DOWN), statusHash), new OndownTableColumnModel(ondownIn, ondownStr));//正在下载
                break;
            
case BEEN_DOWNED:
                String[] beenDownAndDustbinStr 
= {"状态""文件名称""博客""文件大小""文件类型""注释""日期"};
                
int[] beenDownAndDustbinIn = {40100100200400200100};
                jtable 
= new JTable(new DustbinTableModel(allTaskManager.getSubTask(BEEN_DOWNED), statusHash), new BeenDownedTableColumnModel(beenDownAndDustbinIn, beenDownAndDustbinStr));//已经下载
                break;
            
case DUSTBIN:
                String[] beenDownAndDustbinStr1 
= {"状态""文件名称""博客""文件大小""文件类型""注释""日期"};
                
int[] beenDownAndDustbinIn1 = {40100100200400200100};
                jtable 
= new JTable(new DustbinTableModel(allTaskManager.getSubTask(DUSTBIN), statusHash), new DustbinTableColumnModel(beenDownAndDustbinIn1, beenDownAndDustbinStr1));//垃圾箱
                break;
        }

        jtable.setRowHeight(
16);
        jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
//设置最大化时,表也自动跟着最大化
        jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        jtable.getTableHeader().setReorderingAllowed(
false);
        
return jtable;
    }

 

设置一些相关参数,根据请求的类型进行创建JTable,三个JTable创建好之后,我们就可以点击JTree跳到相应的界面,这时我们最好用CardLayout, 就可以随意切换到相应的JTable.

在界面设计上就讲到这些.由于其它的设计相对比较繁杂,这里也就不多说了.

 

 

其次就是流程设计:

程序主要有三个主要板块:正在下载,已下载,垃圾箱.(相应的由三个JTabel)

当从"正在下载"里删除一个任务时,它会被放到"垃圾箱",但当把它从"垃圾箱"移动时,它又会被移动到"正在下载",

我们把每一个任务定义为SubTask:这主要有如下这些参数:

 

 private TaskMoveListener tml;
    
private int type;//任务类型 (正在下载,已经下载,垃圾箱)
    private int status = ONDOWNLOAD;//任务状态(正在下载,暂停下载,下载失败,下载完毕)
    private String fileName;//文件名称
    private long length;//文件大小
    private int progress =40;//文件进度
    private String resource;//资源
    private float speed;//下载速度
    private int restTime;//剩余时间
    private int takeTime;//用时(已经花了的时间)
    private String fileType;//文件类型
    private String note;//文件注释
    private Time date;//下载日期
    private String blog;//博客

 

接着定义三个TaksManger(为三个JTable( "正在下载","已下载","垃圾箱")

每个TaskManager里包涵着相应的SubTask,TaskManager里的变量是:

List<SubTask> list;

那么,当我们要从一个任务区里移动一个任务到另一个任务区里,要怎么实现呢?

我们就必须再定义一个用来管理这三个TaksManager. 这个类叫做AllTaksManager

用来管理这三个TaksManager,当移动一个任务时要把它先把它添加到目的列表,再从相应的列表中除去.

具体实现也就是对三个列表的操作.以上是比较简单但又是核心的一些设计.

原创粉丝点击