如何在 Java 中从 JTable 中删除一行

在 Java 中删除 JTable 中的行取决于 JTable 的模板。JTable 默认使用  DefaultTableModel。但是,您也可以在 DefaultTableModel
DefaultTableModel 中指定自己的 Table Model.

Delete,将数据存储在 Vector 数组中,这样可以更轻松地删除,方法是使用 romoveRow(int line).

import javax.swing.JFrame;
导入 javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
导入 javax.swing.table.DefaultTableModel;

public class JTableExample extends JFrame{

Object[][] data = {{9,8,7,6},{7,6,5},{6,5,4}};
String[] 标题 = {c1”, c2”, c3”};

public JTableExample(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);

DefaultTableModel dtm = new DefaultTableModel(data, title);
table.setModel(dtm);
this.getContentPane().add(new JScrollPane(table),BorderLayout.CENTER);
//删除行 2
((DefaultTableModel)table.getModel()).removeRow(1);
pack();
}

public static void main(String[] args) {
new JTableExample();
}
}

Output
jtable
Front
删除
After

删除 in AbstractTableModel

如果您创建了自己的模型,该模型继承自  AbstractTableModel,那么你还必须实现 removeRow。此实现取决于您为存储数据而实现的结构的性质。

例如,如果您使用 ArrayList JTable model,则它将如下所示:

class Model extends AbstractTableModel{

List<对象>数据 = new ArrayList<对象>();
public void removeRow(int line){
this.data.remove(line);
}
}
JTable HashMap Model

class Model 扩展 AbstractTableModel{

HashMap<整数,对象[]>data = 新的 HashMap<整数,对象[]>();
public void removeRow(int line){
this.data.remove(line);
}
}
如果你使用的是元素不是动态存储的二维数组,那么你就会遇到问题,因为没有函数可以从数组中删除一行。因此,您将创建一个偏移量,该偏移量将具有不必要的复杂度 (n-k)*m(k;行索引)引起的偏移所有元素所需的时间和操作次数。

References:
Oracle 文档:DefaultableModel
Developpez.com:使用 AbstractTableModel
okipa.be 显示数组:在 JTable