首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

JTable设立指定行列cell的值

2013-06-25 
JTable设置指定行列cell的值JTable,数据模型用的是实现AbstractTableModel抽象类。现在JTable已经从数据库

JTable设置指定行列cell的值
JTable,数据模型用的是实现AbstractTableModel抽象类。现在JTable已经从数据库中取出值并且已经能够正确显示,现在有需求要更改某一列的值为指定的字符串,就像数据库中存储男女为0、1,想在jtable中把0、1改成男、女。有人说用jtable的setvalueat方法,可是set后没有任何反应,又有人说要重写此方法可惜不会啊,求指教~JTable设立指定行列cell的值 jtable
[解决办法]
去看看我的收藏吧
[解决办法]
改完之后运行下面代码试试
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
table.updateUI();
}
});
[解决办法]
附一简单tableModel的实现,希望对你有帮助

public class SimpleTableModel extends AbstractTableModel {

private String[] columns;// 表头数组

private List valueObjs = new ArrayList();// 表格值列表,为Object[]对象

private boolean cellEditabled = false;// 列是否可以修改
private boolean Editabled = false;// 哪些列可以修改

public SimpleTableModel(String[] columns, List valueObjs) {
this.columns = columns;
this.valueObjs = valueObjs;
}

/**
 * 获取总行数
 * 
 * @return 总行数
 */
public int getRowCount() {
return getValueObjs().size();
}

/**
 * 获取总列数
 * 
 * @return 总列数
 */
public int getColumnCount() {
return columns.length;
}

/**
 * 得到指定列的列名
 * 
 * @param column
 *            指定列
 * @return 指定列的列名
 */
public String getColumnName(int column) {
return columns[column];
}

/**
 * 指定单元格是否可以编辑
 * 
 * @param row
 *            行序号
 * @param col
 *            列序号
 * @return true or false
 */
public boolean isCellEditable(int r, int c) {
//if (Editabled) {
//return (c == 0) 
[解决办法]
 (c == 2);
//}
return false;
}

public void setCellEdit(boolean b) {
Editabled = b;
}

/**
 * 设置单元格是否可以编辑
 * 
 * @param b
 *            true or false
 */
public void setCellEditable(boolean b) {
cellEditabled = b;
}

/**
 * 获得指定单元格的值
 * 
 * @param row
 *            行序号


 * @param col
 *            列序号
 * @return 指定单元格的值
 * 
 */
public Class getColumnClass(int c) {
if(c == MainFramePanel._state){
return MyCellRender.class;
}
return super.getClass();
}

public Object getValueAt(int row, int col) {
if (getValueObjs().size() <= row) {
return null;
}
return ((Object[]) getValueObjs().get(row))[col];
}

/**
 * 设置指定单元格的值
 * 
 * @param row
 *            行序号
 * @param col
 *            列序号
 */
public void setValueAt(Object value, int row, int col) {
if (getValueObjs().size() <= row) {
return;
}
((Object[]) getValueObjs().get(row))[col] = value;
fireTableCellUpdated(row, col);
}

/**
 * 获得指定值的行序号
 * 
 * @parma value 指定值
 * @return 行序号
 */
public int findRow(Object value) {
for (int i = 0; i < valueObjs.size(); i++) {
if (((Object[]) valueObjs.get(i))[0].equals(((Object[]) value)[0])) {
return i;
}
}
return -1;
// return getValueObjs().indexOf(value);
}

/**
 * 在最后增加一行
 * 
 * @parma value 指定值
 */
public void appendRow(Object value) {
getValueObjs().add(value);
fireTableDataChanged();
}

/**
 * 删除指定行
 * 
 * @param row
 *            行序号
 */
public void removeRow(int row) {
getValueObjs().remove(row);
fireTableDataChanged();
}

/**
 * 清空整个表格
 */
public void clean() {
valueObjs = new ArrayList();
fireTableDataChanged();
}

/**
 * 取出所有数据
 */
public List getValueObjs() {
return valueObjs;
}

/**
 * 重新加载表格数据
 * 
 * @param values
 *            新的数据
 */
public void reloadTable(List values) {
valueObjs.removeAll(valueObjs);
valueObjs.addAll(values);
fireTableDataChanged();
}
}

热点排行