`
qian
  • 浏览: 17194 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

javaswing表相关操作

    博客分类:
  • java
 
阅读更多
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;
	}
	
}
分享到:
评论

相关推荐

    java swing 表头不可拖动

    在标题"java swing 表头不可拖动"中,提到的问题是关于如何在Java Swing应用中阻止JTable的列头进行拖动操作。这通常是通过自定义JTable或其相关的HeaderView来实现的。在Swing中,JTable的表头(表头即列头)是由...

    java swing串口通信源码

    本文将深入探讨如何使用Java Swing进行串口通信,以及涉及的相关技术。 首先,串口通信是一种古老的通信方式,但至今仍广泛应用于各种硬件设备的通信,如打印机、GPS模块、温度传感器等。在Java中,我们可以使用`...

    JAVA swing中文离线API文档

    Java Swing是Java标准库中的一个组件集合,用于构建桌面应用程序用户界面。它是Java Foundation Classes (JFC)的一部分,提供了一套轻量级的GUI(图形用户界面)组件,支持丰富的交互功能。本离线API文档详细阐述了...

    java Swing读取图片

    本篇文章将详细讲解如何在Java Swing中读取和显示图片,以及与之相关的知识点。 首先,我们需要了解Java中的图像处理类。`java.awt.Image`类是表示图像的基本类,它提供了加载、显示和操作图像的方法。而`javax....

    java swing漂亮软件界面 超酷 以及javaswing教程.rar.rar

    这个压缩包“java swing漂亮软件界面 超酷 以及javaswing教程.rar.rar”很可能包含了一系列关于如何使用Java Swing创建美观、酷炫界面的教程和示例代码。 在Java Swing中,开发者可以使用各种组件来构建应用,如...

    java swing实现pdf阅读器

    在Java Swing中实现PDF阅读器是一项技术挑战,涉及到对PDF文件格式的理解、IO操作、Swing组件的使用以及可能的第三方库集成。 PDF(Portable Document Format)是一种广泛使用的文件格式,用于存储文档,包括文本...

    JAVA Swing日期选择控件datepicker

    Java Swing 是Java GUI(图形用户界面)开发的一个重要库,它提供了一系列丰富的组件,用于创建桌面应用程序。在Swing中,DatePicker是一个非常实用的控件,允许用户方便地选择日期,通常用于输入或显示日期相关的...

    Java Swing JTable分页

    ### Java Swing JTable 分页实现详解 #### 一、引言 在开发基于Java Swing的应用程序时,我们经常需要处理大量的数据展示问题。对于表格形式的数据展示,`JTable`是一个非常常用且强大的组件。然而,当数据量过大时...

    基于Java Swing 的带有文件上传和下载的聊天室

    【Java Swing 文件上传和下载聊天室】是一个使用Java Swing库构建的本地客户端-服务器应用程序,它允许用户进行实时聊天并交换文件。这个项目的核心技术包括Java的网络编程、图形用户界面设计以及文件处理。 首先,...

    The Definitive Guide to Java Swing Third Edition

    - **社区资源**:Stack Overflow、GitHub 等平台上有大量的 Swing 相关问题解答和示例代码。 - **在线课程**:Coursera、Udemy 等网站提供了关于 Swing 的课程。 通过上述内容的学习,读者能够深入了解 Java Swing ...

    java swing 图书管理系统+MySQL

    7. **文件操作**:可能包含数据库配置文件(如db.properties)或日志文件的读写,这些操作可以通过Java的File类和相关的I/O流实现。 8. **异常处理**:在处理数据库连接、文件操作或网络请求时,可能会遇到异常。...

    java swing 调用本地摄像头

    Java Swing 是Java GUI(图形用户界面)库的一部分,主要用于创建桌面应用程序。在Java Swing中,我们可以通过Java Media Framework (JMF) 或者更现代的JavaFX来实现调用本地摄像头的功能。下面将详细介绍如何在Java...

    Java Swing组件综合练习

    在“Swing_Chapter05”这个文件中,很可能包含了与这些组件相关的示例代码和教程,可以帮助你更好地理解和实践如何在Java Swing中使用这些组件。通过实际编写和运行这些例子,你可以掌握Swing组件的基本用法,提升...

    JAVA SWing 实现C/S模式的数据库编程及WebServices 调用实现

    在本项目"JAVA SWing 实现C/S模式的数据库编程及WebServices 调用实现"中,开发者可能已经创建了一个Java Swing应用程序,该应用具有用户界面,允许用户进行数据操作。这些操作可能包括添加、删除、更新数据库记录。...

    java swing 实现的word文档转换成pdf文档

    在IT行业中,Java Swing是一个用于构建桌面应用程序的Java库,它是Java Foundation Classes (JFC)的一部分。Swing提供了丰富的组件和API,使开发者能够创建功能强大的图形用户界面(GUI)。在给定的场景中,我们关注...

    java Swing电子相册管理系统 面向对象思想

    Java Swing电子相册管理系统是一个基于面向对象思想设计的桌面应用程序,它允许用户管理和查看他们的照片集合。Swing是Java提供的一种用于创建图形用户界面(GUI)的库,它提供了丰富的组件和工具,使得开发者可以...

    java swing小程序

    这个“java swing小程序”压缩包很可能包含了一些示例代码,可以帮助初学者或者开发者更好地理解和掌握Java Swing的相关知识。下面将详细讨论Java Swing的主要组件、特性以及如何通过这些小程序进行学习。 Java ...

    java swing 多选下拉框 支持动态加载数据

    Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。在Swing中,多选下拉框通常由JComboBox类实现,但默认的JComboBox只支持单选。为了实现多选功能,我们需要扩展JComboBox或者使用第三方库,如JList...

    java swing 画图板

    下面将详细讨论相关的Java Swing知识点。 1. **组件(Components)**:在Swing中,JFrame是窗口的基础,它是顶级容器,用于容纳其他组件。在这个项目中,一个JFrame被用来创建画图板窗口。 2. **JPanel**:JPanel...

Global site tag (gtag.js) - Google Analytics