Bra*_*lor 35
要从JTable中删除行,您需要从基础TableModel中删除目标行.例如,如果您的TableModel是DefaultTableModel的实例,则可以通过执行以下操作来删除行:
((DefaultTableModel)myJTable.getModel()).removeRow(rowToRemove);
Run Code Online (Sandbox Code Playgroud)
如果您需要一个简单的工作解决方案,请尝试使用DefaultTableModel.
如果您已经创建了自己的表模型,它扩展了AbstractTableModel,那么您还应该实现removeRow()方法.确切的实现取决于您用于存储数据的底层结构.
例如,如果您使用过Vector,那么它可能是这样的:
public class SimpleTableModel extends AbstractTableModel {
private Vector<String> columnNames = new Vector<String>();
// Each value in the vector is a row; String[] - row data;
private Vector<String[]> data = new Vector<String[]>();
...
public String getValueAt(int row, int col) {
return data.get(row)[col];
}
...
public void removeRow(int row) {
data.removeElementAt(row);
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用过List,那么它将非常相似:
// Each item in the list is a row; String[] - row data;
List<String[]> arr = new ArrayList<String[]>();
public void removeRow(int row) {
data.remove(row);
}
Run Code Online (Sandbox Code Playgroud)
HashMap的:
//Integer - row number; String[] - row data;
HashMap<Integer, String[]> data = new HashMap<Integer, String[]>();
public void removeRow(Integer row) {
data.remove(row);
}
Run Code Online (Sandbox Code Playgroud)
如果你使用像这样的数组
String[][] data = { { "a", "b" }, { "c", "d" } };
Run Code Online (Sandbox Code Playgroud)
然后你运气不好,因为没有办法从数组中动态删除元素.您可以尝试通过单独存储一些标志来通知哪些行被删除,哪些不是,或者通过其他一些狡猾的方式,但我会建议反对它...这会引入不必要的复杂性,实际上只是解决通过创建另一个问题.这是一个肯定的方式来结束这里.尝试使用上述方法之一来存储表数据.
为了更好地理解这是如何工作的,以及如何使自己的模型正常工作,我强烈建议您参考Java Tutorial,DefaultTableModel API及其源代码.
小智 5
嗯是很简单的家伙
for( int i = model.getRowCount() - 1; i >= 0; i-- )
{
model.removeRow(i);
}
Run Code Online (Sandbox Code Playgroud)
JTable 通常构成 MVC 实现的视图部分。您需要从模型中删除行。JTable 应该监听这些更改,并将更新以反映此删除。因此,您在 JTable 上找不到 removeRow() 或类似的方法。
| 归档时间: |
|
| 查看次数: |
99737 次 |
| 最近记录: |