Java 编辑单元格时切换值

Java 编辑单元格时切换值,java,swing,jtable,editing,Java,Swing,Jtable,Editing,我有一个JTable,它使用一个定制的TableModel来显示一系列对象实例。getValueAt(int row,int column)中有一个开关,用于根据给定属性返回值(见下文)。一个return语句涉及将1/0的值返回为true/false 有没有办法修改此TableModel,使其在编辑单元格时显示1/0 public Object getValueAt(int row, int column) { User user = (User)dataVector.get(row);

我有一个JTable,它使用一个定制的TableModel来显示一系列对象实例。
getValueAt(int row,int column)
中有一个开关,用于根据给定属性返回值(见下文)。一个return语句涉及将1/0的值返回为true/false

有没有办法修改此TableModel,使其在编辑单元格时显示1/0

public Object getValueAt(int row, int column) {
    User user = (User)dataVector.get(row);
    switch (column) {
        case ID_INDEX:
           return user.getId();
        case USERNAME_INDEX:
           return user.getUserName();
        case PASSWORD_INDEX:
            return "****";
        case ACTIVATED_INDEX:
            return (user.getActivated())?"true":"false";
        default:
           return new Object();
    }
}
这是一个
JCheckBox
。考虑使用

case ACTIVATED_INDEX:
    return Boolean.valueOf(user.getActivated());
或者

case ACTIVATED_INDEX:
    return (user.getActivated())?"1":"0";
附录:例如,不重写
getColumnClass()
,而
AbstractTableModel
只返回
Object.class
。您的
TableModel
应该相应地覆盖
getColumnClass()

DefaultTableModel dtm = new DefaultTableModel() {

    @Override
    public Class<?> getColumnClass(int col) {
        return getValueAt(0, col).getClass();
    }
};
// add some data
JTable table = new JTable(dtm);
DefaultTableModel dtm=新的DefaultTableModel(){
@凌驾
公共类getColumnClass(int-col){
返回getValueAt(0,col).getClass();
}
};
//添加一些数据
JTable table=新的JTable(dtm);

您需要查看以下内容:

TableCellRenderer
负责在未编辑单元格数据时渲染单元格数据,其中作为
TableCellEditor
负责提供用于编辑单元格值的组件。因此,可以使用两种不同的方式表示数据,具体取决于数据是按法线进行编辑还是仅按法线进行渲染

您应该考虑,如果从GETValueAtE()方法返回布尔类型,则JTALE应该自动呈现JCuffCox,当单元格处于编辑模式时,可以像往常一样点击JCHIXBOX值来更改它。要执行此操作,请返回:

case ACTIVATED_INDEX:
    return Boolean.valueOf(user.getActivated());

链接已更新并更改为
TableCellRenderer和
TableCellEditor`。谢谢。我使用的TableModel似乎生成了一个简单的字符串,而不是JCheckBox。从链接上看,所使用的渲染器似乎取决于
getColumnClass()
@James P.)的结果:是的,我已经在上面详细阐述了。