javaswing表相关操作

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;
	}
	
}

你可能感兴趣的:(swing)