[英]How to remove a single row from JTable
我有一个表,其中包含每行的删除按钮。 我用
int row = table.getEditingRow(); //To fetch the current row to delete.
然后我用
DefaultTableModel model = (DefaultTableModel)table.getModel();
model.removeRow(row);
当我删除第一行和第一行之间的任何内容时,这会删除JTable中的一行,但是如果我删除最后一行,它仍会删除最后一行,但是要删除的下一个项目将出错,说明表中是否有3个项目
Item1
Item2
Item3
当我删除项目3
Item1
Item2
当我删除项目1或项目2后会导致错误
java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
删除Item1,然后删除Item2,然后删除Item3或Item2,然后删除Item1,然后删除Item3,没问题
这就是我构造CellEditor的方式
public class JButtonEditor extends AbstractCellEditor implements TableCellEditor, ActionListener{
JTable table;
JButton button = new JButton();
public JButtonEditor(JTable table){
this.table = table;
button.addActionListener(this);
}
@Override
public Object getCellEditorValue() {
return button.getText();
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
button.setText(value.toString());
return button;
}
@Override
public void actionPerformed(ActionEvent e) {
int row = table.getEditingRow();
int column = table.getEditingColumn();
switch(column){
case 3:
manage(groupId); break;
case 4:
editGroup(groupId); break;
case 5:
deleteGroup(groupId,row); break;
}
}
private void deleteGroup(int groupId,int row) {
//do something here to remove the group from the database
DefaultTableModel model = (DefaultTableModel) table.getModel();
model.removeRow(row);
}
我认为在删除Item3之后,当我接下来删除Item1或Item2时,它认为我仍在删除Item3,并且由于Item3在表模型中消失而导致ArrayOutOfBounds错误?
我的问题已解决。
public void actionPerformed(ActionEvent e) {
int row = table.getEditingRow();
int column = table.getEditingColumn();
fireEditingStopped(); //added this
switch(column){
case 3:
manage(groupId); break;
case 4:
editGroup(groupId); break;
case 5:
deleteGroup(groupId,row); break;
}
}
那是我唯一更改的内容,我仍在使用Cell Renderer,现在可以使用了!
表按钮列显示了我是如何做到这一点的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.