JTable设置指定行列cell的值

留香宝宝 2013-04-28 10:47:39
JTable,数据模型用的是实现AbstractTableModel抽象类。现在JTable已经从数据库中取出值并且已经能够正确显示,现在有需求要更改某一列的值为指定的字符串,就像数据库中存储男女为0、1,想在jtable中把0、1改成男、女。有人说用jtable的setvalueat方法,可是set后没有任何反应,又有人说要重写此方法可惜不会啊,求指教~
...全文
378 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuly505 2013-04-30
  • 打赏
  • 举报
回复
附一简单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();
	}
}
wuly505 2013-04-30
  • 打赏
  • 举报
回复
改完之后运行下面代码试试 SwingUtilities.invokeLater(new Runnable() { @Override public void run() { // TODO Auto-generated method stub table.updateUI(); } });
留香宝宝 2013-04-29
  • 打赏
  • 举报
回复
求帮助啊!!
huntor 2013-04-29
  • 打赏
  • 举报
回复
使用 TableCellRenderer ?
a1216164960 2013-04-29
  • 打赏
  • 举报
回复
去看看我的收藏吧

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧