如何保留选定的行并从 jtable 中删除其他行?
How to keep selected rows and delete other from the jtable?
我想将所有选定的行保留在 jtable 中并删除其余行。我找到了很多关于如何删除选定行的答案,但我怎样才能只删除未选定的行。请帮助
我根本无法测试,但希望对您有所帮助:
public void removeSelectedRows(JTable table){
DefaultTableModel model = (DefaultTableModel) this.table.getModel();
int[] rows = table.getSelectedRows();
int rowsCount = table.getRowCount();
int deletedRows = 0;
for(int i=rowsCount-1;i>-1;i--){
if(i!=rows[rowsCount-1-deletedRows]){ //Check non-selected rows
model.removeRow(i);
deletedRows++;
}
}
}
也许有最简单的方法,但这应该没问题。
我找到了一种更方便的方法,它可以完美应对所有可能的情况。
@Override
public void actionPerformed(ActionEvent e) {
int[] lines = table.getSelectedRows();
for (int i = 0; i < lines.length; i++) {
lines[i] = table.convertRowIndexToModel(lines[i]);
}
List<Integer> l = new ArrayList<Integer>();
for (int i : lines) {
l.add(i);
}
for (int i = table.getRowCount() - 1; i >= 0; i--) {
if (!l.contains(i)) {
model.removeRow(i);
}
}
}
我认为它可以精简一点,或者可以将一些代码移到一个自己的方法中,这使它看起来更干净,但它的工作原理
一些提示:
不用担心所选行的数组。所选行的索引会自动调整为模型中的 add/remove 行。只需从末尾开始删除行,然后随时检查每行的选定状态。
将视图索引转换为模型索引,以防 table 被排序或过滤。
那么基本代码就是:
DefaultTableModel model = (DefaultTableModel)table.getModel();
for (int i = model.getRowCount() -1; i >=0; i--)
{
if (! table.isRowSelected(i))
model.removeRow( table.convertRowIndexToModel(i) );
}
我想将所有选定的行保留在 jtable 中并删除其余行。我找到了很多关于如何删除选定行的答案,但我怎样才能只删除未选定的行。请帮助
我根本无法测试,但希望对您有所帮助:
public void removeSelectedRows(JTable table){
DefaultTableModel model = (DefaultTableModel) this.table.getModel();
int[] rows = table.getSelectedRows();
int rowsCount = table.getRowCount();
int deletedRows = 0;
for(int i=rowsCount-1;i>-1;i--){
if(i!=rows[rowsCount-1-deletedRows]){ //Check non-selected rows
model.removeRow(i);
deletedRows++;
}
}
}
也许有最简单的方法,但这应该没问题。
我找到了一种更方便的方法,它可以完美应对所有可能的情况。
@Override
public void actionPerformed(ActionEvent e) {
int[] lines = table.getSelectedRows();
for (int i = 0; i < lines.length; i++) {
lines[i] = table.convertRowIndexToModel(lines[i]);
}
List<Integer> l = new ArrayList<Integer>();
for (int i : lines) {
l.add(i);
}
for (int i = table.getRowCount() - 1; i >= 0; i--) {
if (!l.contains(i)) {
model.removeRow(i);
}
}
}
我认为它可以精简一点,或者可以将一些代码移到一个自己的方法中,这使它看起来更干净,但它的工作原理
一些提示:
不用担心所选行的数组。所选行的索引会自动调整为模型中的 add/remove 行。只需从末尾开始删除行,然后随时检查每行的选定状态。
将视图索引转换为模型索引,以防 table 被排序或过滤。
那么基本代码就是:
DefaultTableModel model = (DefaultTableModel)table.getModel();
for (int i = model.getRowCount() -1; i >=0; i--)
{
if (! table.isRowSelected(i))
model.removeRow( table.convertRowIndexToModel(i) );
}