簡體   English   中英

如何從JTable中刪除單行

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM