您的位置:首页 > 移动开发 > Objective-C

JTable中,显示checkbox以及更改选中状态

2011-01-05 15:19 316 查看
继续做完的JTable的来学习和实践,默认情况下构造的JTable,内容是死的,不能更改,可以通过实现3个TableModel来作为JTable构造时候的参数穿进去,就可以灵活的对JTable就行构造了,来看下我这个JTable的例子,带上注释就好了。。

/**
*
*/
package com.baseframework.core.ui.component;

import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableColumn;

/**
* @author sunyanan
*
* 是整体框架的左侧树状导航,也是任务的开始设置地方,整体返回一个JTable的实例
*
*/
public class LeftTableNavigation {

// 单例一下
private LeftTableNavigation() {};

private static LeftTableNavigation l = new LeftTableNavigation();

public static LeftTableNavigation getInstance() {

return l;
}

// 左侧导航JTable的唯一实例
private JTable table;

/**
* 主要的产生导航Table的方法
*
* @return JTable的实例
*/
public JTable process() {

if(table == null) {
table = new JTable(new LinkTableMode());
}
// 设置表头不伸缩模式:如果手工调整一个表头栏目,其他的不会跟随着变的
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// 设置表头的宽度
for(int i = 0; i < table.getColumnCount(); ++i) {
TableColumn tc = table.getColumnModel().getColumn(i);
tc.setPreferredWidth(table.getColumnName(i).length() * 15);
}

return table;
}

}

class LinkTableMode extends AbstractTableModel {

private static final long serialVersionUID = 1016386589304301730L;

// 常量配置区
private String[] tableHeader = {"初始关键词&列表", "采相关词", "采网址", "采内容", "发内容"};
private Object[][] data = {{"初始关键词&列表", false, true, true, true}};

@Override
public int getColumnCount() {

return tableHeader.length;
}

@Override
public int getRowCount() {

return data.length;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {

return data[rowIndex][columnIndex];
}

@Override
public String getColumnName(int column) {

return tableHeader[column];
}

/**
* 默认情况下这个方法不用重新实现的,但是这样就会造成如果这个列式boolean的类型,就当做string来处理了
* 如果是boolean的类型那么用checkbox来显示
*/
@Override
public Class<?> getColumnClass(int columnIndex) {

return getValueAt(0, columnIndex).getClass();
}

/**
* 来判断当前选中的单元格是够可以被编辑,因为我是从第二列需要可以编辑的,也就是复选框的列可以编辑的,故
* 我有个逻辑判断的哈
*/
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if(columnIndex > 0) return true;
return false;
}

/**
* 如果这个列可以被编辑的话,但是没有这个方法,当回车后是恢复之前的内容的,只有在这个地方通过对新值的
* 获取然后再设置进去才会被更改的。
*/
@Override
public void setValueAt(Object value, int rowIndex, int columnIndex) {
System.out.println("[row: "+ rowIndex + ", column: " + columnIndex + ", value: " + value + " ]");
data[rowIndex][columnIndex] = value;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息