Swing中经常会遇到的若干问题——JTable(持续更新)
本文是在学习中的总结,欢迎转载但请注明出处: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(持续更新)的更多相关文章
- java开发中遇到的问题及解决方法(持续更新)
摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...
- 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...)
目录 一些JavaSE学习过程中的思路整理(主观性强,持续更新中...) Java书写规范 IDEA的一些常用快捷键 Java类中作为成员变量的类 Java源文件中只能有一个public类 Java中 ...
- 关于ASP.NET MVC开发设计中出现的问题与解决方案汇总 【持续更新】
最近一直用ASP.NET MVC 4.0 +LINQ TO SQL来开发设计公司内部多个业务系统网站,在这其中发现了一些问题,也花了不少时间来查找相关资料或请教高人,最终都还算解决了,现在我将这些问题 ...
- Android开发中Eclispe相关问题及相应解决(持续更新)
1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...
- android及IOS的测试中容易疏漏或者测漏的点——持续更新
1.控件的生命周期——控件消隐之后,会不会依然可点,导致出现进一步的响应?这个之前没想过,之后需要加入到测试点中 2.在登录界面同时出现弹窗: 如:特殊情况下,同时出现弹窗,又刚好退出登录,因此登录界 ...
- web开发中兼容性问题(IE8以上含)持续更新~~
在实际开发中总是遇到莫名其妙的问题~~~那么就记录下来这些问题,对这些问题进行一个总结. 1.事件对象 1)事件参数e,就是事件对象,标准的获取方式 2)e.eventPhase 事件阶段,IE8以前 ...
- 你必须知道的----C语言笔试面试中经典易错的一些知识点(持续更新)
1. 关于二级指针的解析和引用 1.1 二级指针意义 二级指针存放的是一级指针的地址 Ex: Int a = ; Int *p = &a; Int **q = &p; 1.2 ...
- http协议中到底都有什么内容?【持续更新】
http协议中到底都会传输我电脑上的啥东西呢?主机名,账号密码? 没有主机名,有你这台主机的操作系统...也就是说他们会知道你的操作系统.....
- 安卓中经常使用控件遇到问题解决方法(持续更新和发现篇幅)(在textview上加一条线、待续)
TextView设置最多显示30个字符.超过部分显示...(省略号),有人说分别设置TextView的android:signature="true",而且设置android:el ...
随机推荐
- __str__与__repr__
在讲解之前,我们先来了解下str和repr的区别:两者都是用来将数字,列表等类型的数据转化为字符串的形式.不同之处在于str更加类似于C语言中使用printf输出的内容,而repr输出的内容会直接将变 ...
- Python中的赋值(复制)、浅拷贝、深拷贝之间的区别
1.赋值: 只是复制了新对象的引用,不会开辟新的内存空间. 2.浅拷贝: 创建新对象,其内容是原对象的引用. 浅拷贝有三种形式:切片操作,工厂函数,copy模块中的copy函数. 如: ...
- DotnetSpider (二) Downloader的设置 Request自定义数据字典
本篇主要分享自定义Downloader和Request信息,实现自定义请求内容,及将自定义内容存储. ** 温馨提示:如需转载本文,请注明内容出处.** 本文连接:http://www.cnb ...
- Qt与FFmpeg联合开发指南(二)——解码(2):封装和界面设计
与解码相关的主要代码在上一篇博客中已经做了介绍,本篇我们会先讨论一下如何控制解码速度再提供一个我个人的封装思路.最后回归到界面设计环节重点看一下如何保证播放器界面在缩放和拖动的过程中保证视频画面的宽高 ...
- 转:Socket原理与编程基础
from: http://acm.tzc.edu.cn/acmhome/projectList.do?method=projectNewsDetail&nid=2 一.Socket简介 Soc ...
- leetcode刷题笔记08 字符串转整数 (atoi)
题目描述 实现 atoi,将字符串转为整数. 在找到第一个非空字符之前,需要移除掉字符串中的空格字符.如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即 ...
- 全网代理公开ip爬取(隐藏元素混淆+端口加密)
简述 本次要爬取的网站是全网代理,貌似还是代理ip类网站中比较有名的几个之一,其官网地址: http://www.goubanjia.com/. 对于这个网站的爬取是属于比较悲剧的,因为很久之前就写好 ...
- Angular2的input和output(原先的properties和events)
angular2学习笔记 本文地址:http://blog.csdn.net/sushengmiyan 本文作者:苏生米沿 文章来源:http://blog.ng-book.com/angular-2 ...
- 360浏览器不能打开CSDN登陆页面
碰见个奇葩问题: 使用360浏览器(广大程序员不要鄙视我~ 我有我的理由)不能打开csdn的登陆页面~~你登陆的时候,他就一直在那里打转~~ 但是用ie就可以打开登陆页面.... 怎么回事???难道C ...
- 如何在控制台切换Xcode的版本
打开控制台,输入 xcode-select -p 你可以看到当前Xcode所使用的版本路径,比如本猫的输出为: /Applications/Xcode-beta.app/Contents/Develo ...