本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/40955213

(1)让组件在屏幕中央显示

	public static void setContainerCenter(Container container) {
		Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
		int screenWidth = screenSize.width;
		int screenHight = screenSize.height;
		container.setLocation((screenWidth - container.getWidth()) / 2, (screenHight - container.getHeight()) / 2);
	}

(2)隐藏Jtable中的某一列

	public static void hideColByLocation(int col, JTable table){
		DefaultTableColumnModel dcm = (DefaultTableColumnModel) table.getColumnModel();
		dcm.getColumn(col).setPreferredWidth(0);
		dcm.getColumn(col).setMaxWidth(0);
		dcm.getColumn(col).setMinWidth(0);
	}

(3)Jtable中定位到当前新增加的行

	public static void focusCurrentRow(JTable table, List<Object> objs) {
		int last = objs.size() - 1;
		table.setRowSelectionInterval(last, last);
		table.changeSelection(last, 0, false, false);
	}

(4)Jtable中行的上移、下移操作

	public static void eventOnMoveUpOrDowmBySelectedRow(JTable table, String str, List<String> nameList) {
		int[] selectedRows = table.getSelectedRows();
		for (int i = 0; i < selectedRows.length - 1; i++) {
			if(selectedRows[i + 1] - selectedRows[i] != 1){
				return;
			}
		}

		List<String> swapSelectedList = null;
		if ("上移".equals(str)) {
			if(selectedRows.length == 1){
				swapSelectedList = swap(nameList, selectedRows[0], selectedRows[0] - 1);
				setNameListAndModel(swapSelectedList, table);
				table.getSelectionModel().setSelectionInterval(selectedRows[0] - 1, selectedRows[0] - 1);
			}else{
				swapSelectedList = swapUp(nameList, selectedRows);
				setNameListAndModel(swapSelectedList, table);
				table.getSelectionModel().setSelectionInterval(selectedRows[0]-1, selectedRows[selectedRows.length-1]-1);
			}
		} else if ("下移".equals(str)) {
			if(selectedRows.length == 1){
				swapSelectedList = swap(nameList, selectedRows[0], selectedRows[0] + 1);
				setNameListAndModel(swapSelectedList, table);
				table.getSelectionModel().setSelectionInterval(selectedRows[0] + 1, selectedRows[0] + 1);
			}else{
				swapSelectedList = swapDown(nameList, selectedRows);
				setNameListAndModel(swapSelectedList, table);
				table.getSelectionModel().setSelectionInterval(selectedRows[0]+1, selectedRows[selectedRows.length-1]+1);
			}
		}
	}

	/**
	 * {方法功能中文描述}上移多行
	 */
	private static  List<String> swapUp(List<String> list, int[] selectedRows) {
		if (selectedRows.length >= list.size() || selectedRows.length == 0 || selectedRows[0] == 0) {
			return list;
		} else {
			String obj = list.get(selectedRows[0] - 1);
			for (int pos : selectedRows) {
				list.set(pos - 1, list.get(pos));
			}
			list.set(selectedRows[0] + selectedRows.length - 1 , obj);
			return list;
		}
	}

	/**
	 * {方法功能中文描述}下移多行
	 */
	private static List<String> swapDown(List<String> list, int[] selectedRows) {
		if (selectedRows.length >= list.size() || selectedRows.length == 0 || selectedRows[selectedRows.length-1] == list.size()-1) {
			return list;
		} else {
			String obj = list.get(selectedRows[selectedRows.length-1] + 1);
			for (int i = selectedRows.length-1; i >= 0; i--) {
				list.set(selectedRows[i] + 1, list.get(selectedRows[i]));
			}
			list.set(selectedRows[0] , obj);
			return list;
		}
	}

	/**
	 * {方法功能中文描述} 交换两行的位置
	 */
	private static List<String> swap(List<String> list, int fromRow, int toRow) {
		if (toRow >= list.size() || toRow < 0) {
			return list;
		} else {
			String obj = list.get(fromRow);
			list.set(fromRow, list.get(toRow));
			list.set(toRow, obj);
			return list;
		}
	}

	private static void setNameListAndModel(List<String> NameList, JTable table) {
		/**重新设置model中数据**/
		table.getModel().setNames(NameList);
		/**数据变化**/
		table.getModel().fireTableDataChanged();
		table.setModel(uiModel);
	}

(5)打开面板选中Jtree第一个节点并展开

	public static void setFirstNode2Selected(DefaultTreeModel model,JPanel panel, JTree currTree){
		/**通过树根获取其第一个孩子**/
		TreeNode firstChild = (TbTreeNode) ((DefaultMutableTreeNode)panel.getLeftContentPanel().getTreeModel().getRoot()).getFirstChild();
		Object userObject = firstChild.getUserObject();
		/**通过VO获取Node对象**/
		TreeNode childnode = panel.getTreeModel().getNodeByVo(userObject);
		if(childnode!=null){
			childnode.setCanBeSelected(true); /**设置可被选中**/
			childnode.setSelectState(TreeNode.SELECTED); /**设置被选中**/
		}
		/**设置选中的路径状态**/
		currTree.getSelectionModel().setSelectionPath(new TreePath(childnode.getPath()));
	}

(6)JTable行的多种选择模式

	setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION); //一次选择一个或多个连续的索引范围。
	setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);  //一次选择一个连续的索引范围。
        setSelectionMode(ListSelectionModel.SINGLE_SELECTION);   //一次选择一个列表索引。

(7)JTable不可编辑

调用AbstractTableModel中的setWriteable()方法,true为可以编辑,false为不可编辑

(8)JTable中数据发生变化时

调用AbstractTableModel中 fireTableDataChanged()方法进行处理

(9)JTable显示设置

     //设置列名称
     private static final String[] colNames = new String[] { "A", "B", "C", "D"};

     //设置列名称显示
     public String getColumnName(int column) {
	  return colNames[column];
      }

     //设置列数目
     public int getColumnCount() {
	  return colNames.length;
     }

     //是否可编辑
     public boolean isCellEditable(int rowIndex, int columnIndex) {
          if(!isWriteable){
		return false;
	  }
	  if(isWriteable){
	    //设置第二列可以编辑
	     if(columnIndex == 1){
		return true;
	     }
	  }
	   return false;
      }

      //填充数据模型
      public Object getValueAt(int rowIndex, int columnIndex) {
	  //假设从某一list中获取数据对象,遍历该list
	  if (list != null && list.size() > 0) {
	      for (int i = 0;i< list.size(); i++) {
		 switch (columnIndex) {
		     case 0:
	        		return ""; //返回值自行设定
	 	     case 1:
	              		return "";
		     case 2:
				return "";
		     case 3:
				return "";
		     case 4:
				return "";
		}
	     }
	  }
	     return null;
	}

	//修改表中数据时
	public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
	     if(columnIndex == 1){
		  //操作...
	     }
	}

Swing中经常会遇到的若干问题——JTable(持续更新)的更多相关文章

  1. java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...

  2. 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)

    目录 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...) Java书写规范 IDEA的一些常用快捷键 Java类中作为成员变量的类 Java源文件中只能有一个public类 Java中 ...

  3. 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】

    最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题 ...

  4. Android开发中Eclispe相关问题及相应解决(持续更新)

    1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...

  5. android及IOS的测试中容易疏漏或者测漏的点——持续更新

    1.控件的生命周期——控件消隐之后,会不会依然可点,导致出现进一步的响应?这个之前没想过,之后需要加入到测试点中 2.在登录界面同时出现弹窗: 如:特殊情况下,同时出现弹窗,又刚好退出登录,因此登录界 ...

  6. web开发中兼容性问题(IE8以上含)持续更新~~

    在实际开发中总是遇到莫名其妙的问题~~~那么就记录下来这些问题,对这些问题进行一个总结. 1.事件对象 1)事件参数e,就是事件对象,标准的获取方式 2)e.eventPhase 事件阶段,IE8以前 ...

  7. 你必须知道的----C语言笔试面试中经典易错的一些知识点(持续更新)

    1. 关于二级指针的解析和引用 1.1  二级指针意义  二级指针存放的是一级指针的地址    Ex: Int a = ; Int *p = &a; Int **q = &p; 1.2 ...

  8. http协议中到底都有什么内容?【持续更新】

    http协议中到底都会传输我电脑上的啥东西呢?主机名,账号密码? 没有主机名,有你这台主机的操作系统...也就是说他们会知道你的操作系统.....

  9. 安卓中经常使用控件遇到问题解决方法(持续更新和发现篇幅)(在textview上加一条线、待续)

    TextView设置最多显示30个字符.超过部分显示...(省略号),有人说分别设置TextView的android:signature="true",而且设置android:el ...

随机推荐

  1. 使用RestTemplate访问restful服务时遇到的问题

    可以通过通过wireshark抓包,使用Postman发送请求 wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必 ...

  2. day06 Request Response

    rw 读写模板的设置 day05 Request Response 1. HttpServletResponse 简介 1.1 Response 的 OutputStream 输出中文的问题 1.2 ...

  3. 解决警告: Setting property 'source' to 'org.eclipse.jst.jee.server_:' did not find a matching property.的方法

    今天第一次搭建struts2框架,跟着网上的教程导入对应的jar包之后就开始写登录的jsp页面,但是运行时出现了问题, 浏览器显示"The requested resource is not ...

  4. UMAIL安装教程

    UMAIL安装教程 一.UMAIL虚拟机的创建与安装 首先在VM中选择新建虚拟机 选择下一步 选择稍后安装操作系统 选择Linux系统 版本CentOS 7 64位 选择名称与安装位置 选择下一步 选 ...

  5. 重载equals方法时要遵守的通用约定--自反性,对称性,传递性,一致性,非空性

    本文涉及到的概念 1.为什么重载equals方法时,要遵守通用约定 2.重载equals方法时,要遵守哪些通用约定   为什么重载equals方法时,要遵守通用约定 Object类的非final方法都 ...

  6. 安卓图片Bitmap一些旋转处理

    Bitmap convert(Bitmap a, int width, int height) { int w = a.getWidth(); int h = a.getHeight(); Bitma ...

  7. Android开发学习之路--Java和Js互相调用

      随着前端的火热,以前开发的快速,越来越多的native app在其中融合了h5,就拿淘宝就是很多的h5组成的,一旦出现什么节日,他都可以不用通过更新app来实现界面的改变,而且android和io ...

  8. Sublime Text 3下C/C++开发环境搭建

    Sublime Text 3下C/C++开发环境搭建 之前在Linux Mint 17一周使用体验中简单介绍过Sublime Text. 1.Sublime Text 3安装 Ubuntu.Linux ...

  9. App安全(一) Android防止升级过程被劫持和换包

    文/ Tamic 地址/ http://blog.csdn.net/sk719887916/article/details/52233112 前言 APP 安全一直是开发者头痛的事情,越来越多的安全漏 ...

  10. VBA find方法

    Sub Sample() Dim sfzs As New Collection Dim ws, wbs, dbs As Worksheet Dim r As Long Set ws = ThisWor ...