JTable,数据模型用的是实现AbstractTableModel抽象类。现在JTable已经从数据库中取出值并且已经能够正确显示,现在有需求要更改某一列的值为指定的字符串,就像数据库中存储男女为0、1,想在jtable中把0、1改成男、女。有人说用jtable的setvalueat方法,可是set后没有任何反应,又有人说要重写此方法可惜不会啊,求指教~jtable

解决方案 »

  1.   

    使用 TableCellRenderer ?
      

  2.   

    改完之后运行下面代码试试
    SwingUtilities.invokeLater(new Runnable() { @Override
    public void run() {
    // TODO Auto-generated method stub
    table.updateUI();
    }
    });
      

  3.   

    附一简单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();
    }
    }