[英]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.