public class DownTaskTable extends JTable { private DownTaskTableModel downTaskTableModel; private DownedItemInfoPanel mInfoPanel; JPopupMenu jpop = new JPopupMenu(); JMenuItem open = new JMenuItem("打开目录"); public DownTaskTable(DownTaskModel downTaskModel, DownedItemInfoPanel mInfoPanel ,int type) { this.mInfoPanel = mInfoPanel; init(downTaskModel,type); jpop.add(open); jpop.setUI(new MotifPopupMenuUI()); open.setUI(new BasicButtonUI()); open.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { int rowIndex = getSelectedRow(); final DownTaskItem downTaskItem = downTaskTableModel.getItemValue(rowIndex); String filePath = downTaskItem.getFilePath(); System.out.println("filePath"+filePath); String exec = "explorer /select, " + filePath; Runtime.getRuntime().exec(exec); System.out.println(exec); } catch (IOException e1) { e1.printStackTrace(); } } }); } public JTable init(final DownTaskModel downTaskModel,int type) { SwingUtitle.setTableUI(this); downTaskTableModel = new DownTaskTableModel(downTaskModel,type); setModel(downTaskTableModel); // 表可以被改变宽度,但不能拖走. this.getTableHeader().setReorderingAllowed(false); tableHeader.setBackground(new Color(227, 234, 240)); // 列的宽度控制. TableColumnModel tc = this.getColumnModel(); // 状态列 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); tableHeader.setPreferredSize(new Dimension(780, 29)); Font LABEL_FONT = new Font("微软雅黑", Font.PLAIN, 16); tableHeader.setFont(LABEL_FONT); tableHeader.setForeground(PhoneView.LABEL_FONT_COLOR); this.setRowHeight(37); this.setFont(LABEL_FONT); //监听器,当选择列时调用.用于显示任务信息. DefaultListSelectionModel dlsm=(DefaultListSelectionModel)this.getSelectionModel(); //单选 dlsm.setSelectionMode(DefaultListSelectionModel.SINGLE_INTERVAL_SELECTION); dlsm.addListSelectionListener(new ListSelectionListener() { public void valueChanged(ListSelectionEvent e) { //源. ListSelectionModel lm=(ListSelectionModel)e.getSource(); if(e.getValueIsAdjusting()) { //过滤一次响应. return; } //得到被选择的行. int rowIndex=lm.getLeadSelectionIndex(); int size = downTaskTableModel.getSize(); if (rowIndex < 0 || rowIndex >= size){ mInfoPanel.setDownTaskItem(null); DownloadManangerView.pauseButton.setEnabled(false); DownloadManangerView.startButton.setEnabled(false); DownloadManangerView.deleteButton.setEnabled(false); return; } DownTaskItem taskItem = downTaskTableModel.getItemValue(rowIndex); if(taskItem.getStatus()==DownTaskItem.STATUS_RUN) { DownloadManangerView.pauseButton.setEnabled(true); DownloadManangerView.startButton.setEnabled(false); DownloadManangerView.deleteButton.setEnabled(true); }else if(taskItem.getStatus()==DownTaskItem.STATUS_END) { DownloadManangerView.pauseButton.setEnabled(false); DownloadManangerView.startButton.setEnabled(false); DownloadManangerView.deleteButton.setEnabled(true); } else if(taskItem.getStatus()==DownTaskItem.STATUS_PAUSE) { DownloadManangerView.pauseButton.setEnabled(false); DownloadManangerView.startButton.setEnabled(true); DownloadManangerView.deleteButton.setEnabled(true); } //去数据库中查询 DbModel dbModel = new DbModel(DownModel.DB_TABLE_NAME,DownModel.DB_PATH); List<Map<String, Object>> list = dbModel.query(taskItem.getUrl()); //只要将详细信息显示的条目重数据库中取出 if(null!=list && list.size()>0) { for(int i=0;i<list.size();i++) { Map<String, Object> map = list.get(i); //简介 taskItem.setContent((String) map.get("CONTENT")); taskItem.setFileName((String) map.get("FILENAME")); } } else { PhoneSyncClient.getInstance().sendDownloadUrl(taskItem.getUrl()); } mInfoPanel.setDownTaskItem(taskItem); } }); this.addMouseListener(new MouseAdapter() { // 行内双击事件. public void mouseClicked(MouseEvent e) { if (e.getButton() == 3) return;// 过滤右键 if (e.getClickCount() == 2)// 得到鼠标双击事件. { int rowIndex = getSelectedRow(); // 得到被选择的行.这边可能就存到一个对象中去了 if (rowIndex < 0 || rowIndex >= downTaskTableModel.getSize()) { mInfoPanel.setDownTaskItem(null); DownloadManangerView.pauseButton.setEnabled(false); DownloadManangerView.startButton.setEnabled(false); DownloadManangerView.deleteButton.setEnabled(false); return; } else { DownTaskItem downTaskItem = downTaskTableModel.getItemValue(rowIndex); //如果下载任务的状态是正在下载则让其暂停. if (downTaskItem.getStatus() == DownTaskItem.STATUS_RUN) { DownloadThreadMananger.getInstance(null).stop(downTaskItem); // 暂停按钮被禁用. DownloadManangerView.pauseButton.setEnabled(false); downTaskItem.setStatus(DownTaskItem.STATUS_PAUSE); DownloadManangerView.startButton.setEnabled(true); } //如果状态时暂停 else if(downTaskItem.getStatus()==DownTaskItem.STATUS_PAUSE) { downTaskItem.setStatus(DownTaskItem.STATUS_WAIT); DownloadManangerView.pauseButton.setEnabled(true); DownloadManangerView.startButton.setEnabled(false); } //完成状态 else if (downTaskItem.getStatus() == DownTaskItem.STATUS_END) { // 得到文件路径与文件名. DownloadManangerView.pauseButton.setEnabled(false); DownloadManangerView.startButton.setEnabled(false); DownloadManangerView.deleteButton.setEnabled(false); } } } } //行内右击事件.只在已经存在任务的行内有效. public void mouseReleased(MouseEvent ex) { if (ex.getButton() != MouseEvent.BUTTON3)// 过滤左键. return; Point point = new Point(ex.getX(),ex.getY()); //获得坐标点, final int row = rowAtPoint(point); //根据坐标点获得行的索引. final DownTaskItem downTaskItem = downTaskTableModel.getItemValue(row); requestFocus();//行获得焦点. setRowSelectionInterval(row, row); //准备弹出一个右键菜单. jpop.show((Component)ex.getSource(), ex.getX(),ex.getY()); open.setEnabled(null!=downTaskItem); } }); //网格颜色. this.setGridColor(new Color(192, 192, 192)); //表头. JTableHeader downTableHeader= this.getTableHeader(); //表头有下边框 downTableHeader.setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0))); BorderFactory.createMatteBorder(0, 0, 1, 0, Color.gray); downTableHeader.setBorder(UIManager.getBorder("TableHeader.cellBorder")); // //构造单元格的渲染器. // DefaultTableCellRenderer dtc=new DefaultTableCellRenderer(); // //设置背景色与容器背景色一致. // dtc.setBackground(new Color(227, 234, 240)); //将表头设置成此渲染器. //downTableHeader.setDefaultRenderer(dtc); this.setDragEnabled(false); return this; } public void setType(int type){ downTaskTableModel.setType(type); clearSelection(); } /** * 返回一个设置完成的JScrollPane * @param table * @return */ public static JScrollPane getJScrollPane(JTable table) { JScrollPane jScrollTable = new JScrollPane(); //滚动容器的基本设置 jScrollTable.setBackground(new java.awt.Color(255, 255, 255)); //设置水平的滚动条 jScrollTable.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED); //设置垂直的滚动条 jScrollTable.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); //滚动条没有边框. jScrollTable.setBorder(BorderFactory.createEmptyBorder()); jScrollTable.getVerticalScrollBar().setUI(new MyScrollBarUI()); //表格所在的滚动容器背景色. jScrollTable.setBackground(new Color(226, 238, 249)); //载入表格. jScrollTable.setViewportView(table); //抛出滚动容器. return jScrollTable; } }