Java 如何在JTable中只编辑一列

Java 如何在JTable中只编辑一列,java,swing,jtable,jbutton,Java,Swing,Jtable,Jbutton,我想将我的JTable设置为不可编辑,但我想将JButton添加到其中,并且按钮的列必须对press事件是可编辑的,因此如何才能使此列仅可编辑 以下是我的表格模型代码: DefaultTableModel model = new DefaultTableModel(); model.setColumnIdentifiers(new String[]{ "IDemp",

我想将我的
JTable
设置为不可编辑,但我想将
JButton
添加到其中,并且按钮的列必须对press事件是可编辑的,因此如何才能使此列仅可编辑

以下是我的表格模型代码:

DefaultTableModel model = new DefaultTableModel();
model.setColumnIdentifiers(new String[]{ 
                                        "IDemp",
                                        "empNumber",
                                        "Fname","Lname",
                                        "BirthDate",
                                        "Address",
                                        "email",
                                        "Button" }
                                       );
//TableCellRenderer buttonRenderer = new JTableButtonRenderer();

for(int i=0;i<emps1.size();i++) {
    model.addRow(new Object[]{String.format("%d",emps1.get(i).getIDemp()),
                                String.format("%d",emps1.get(i).getEmpNumber()),emps1.get(i).getFname(),
                                    emps1.get(i).getLname(),emps1.get(i).getBirthDate(),
                                        emps1.get(i).getAddress(), emps1.get(i).getEmail().getEmailAddress()});
}
如何使“按钮”列可编辑而其他列不可编辑?
*如果您有更好的方法将
JButton
添加到
JTable
中,那就太好了。”

您需要扩展
AbstractTableModel
并覆盖
isCellEditable
,如下所示:

public class MyTableModel extends AbstractTableModel {

     public boolean isCellEditable(int row, int col) {
        if (col== columnIndex) { //columnIndex: the column you want to make it editable
            return true;
        } else {
            return false;
        }
    }
}

您需要扩展
AbstractTableModel
并覆盖
isCellEditable
,如下所示:

public class MyTableModel extends AbstractTableModel {

     public boolean isCellEditable(int row, int col) {
        if (col== columnIndex) { //columnIndex: the column you want to make it editable
            return true;
        } else {
            return false;
        }
    }
}

创建类似于
MyTableModel
的东西,它扩展了
AbstractTableModel
并覆盖函数
isCellEditable(int行,int列)
。只需检查
if(column==desiredColumn)返回true;否则返回false;
。我想这样做可以:-)您不需要使用AbstractTableModel只覆盖isCellEditable,而不需要其他内容,但在执行此操作时,我会丢失以下选项:model.setColumnIdentifiers()和model.addRow()为什么有JCheckBox的ButtonUnderer,将布尔值放入DefaultTableModel,overide getColumnClass,更多信息请参见Oracle官方教程,大量问答here@nIcEcOw AbstractTableModel是1.使用API(新对象[],向量)中未实现的数组(util.List等),2.限制/增强(通过重写)实现的方法(默认情况下允许)在DefaultTableModel中,如果没有覆盖(在AbstractTableModel中),那么默认情况下会受到限制(很高兴再次在这里见到您)创建类似于
MyTableModel
的东西,它扩展了
AbstractTableModel
,并覆盖函数
isCellEditable(int行,int列)
。如果(column==desiredColumn)返回true;否则返回false;。我想这样就可以了:-)您不需要只使用AbstractTableModel来覆盖isCellEditable,而不需要其他任何内容,但是当我这样做时,我会丢失以下选项:model.setColumnIdentifiers()和model.addRow()为什么有JCheckBox的ButtonUnderer,将布尔值放入DefaultTableModel,overide getColumnClass,更多信息请参见Oracle官方教程,大量问答here@nIcEcOw AbstractTableModel是1.使用API(新对象[],向量)中未实现的数组(util.List等),2.限制/增强(通过重写)实现的方法(默认情况下允许)在DefaultTableModel中,如果没有覆盖(在AbstractTableModel中),则默认情况下会受到限制(很高兴在这里再次见到您)是的,我找到了,但我是否像我那样将行添加到模型中?@DorCohen您只需要创建自己的表模型实例,而不是
DefaultTableModel
。是的,我找到了,但我是否像我那样将行添加到模型中?@DorCohen您只需要创建自己的表模型实例,而不是
DefaultTableModel
.