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
.