[英]How to delete multiple rows from beantablemodel in java?
我想在選擇時一次刪除多行。
這是我的代碼:
int[] indexList = queryTable.getSelectedRows();
queryTableModel.removeRows(indexList);
queryTable.clearSelection();
SwingUtilities.updateComponentTreeUI(queryTable);
請幫忙。
這是從模型中刪除選定行的簡單示例:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class TestFrame extends JFrame {
private DefaultTableModel model;
public TestFrame() {
init();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
private void init() {
final JTable t = new JTable(model = new DefaultTableModel(0,1));
for(int i =0;i<10;i++){
model.addRow(new Object[]{i});
}
JButton removeSelected = new JButton("remove");
removeSelected.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
int[] selectedRows = t.getSelectedRows();
for(int i=selectedRows.length-1;i >= 0;i--){
model.removeRow(selectedRows[i]);;
}
}
});
add(new JScrollPane(t));
add(removeSelected,BorderLayout.SOUTH);
}
public static void main(String args[]) {
new TestFrame();
}
}
假設您使用DefaultTableModel作為表模型,這應該足夠了:
int[] viewIndexes = table.table.getSelectedRows();
for(int i = viewIndexes.length - 1; i >= 0; i-- ) {
int modelIndex = table.convertRowIndexToModel(viewIndexes[i]);
((DefaultTableModel)table.getModel()).removeRow(modelIndex);
}
永遠不要忘記將選定的索引從view轉換為model 。 否則,如果您的表格已排序,您就會遇到問題。
如果您使用的是自定義TableModel ,則過程幾乎相同,不會有很大差異。
此外,在添加/刪除/更新數據后,您無需執行任何操作來更新視圖,模型會在此類事件中通知視圖,並且最后一個將相應地更新。
有關更多詳細信息,請參閱如何使用表格教程。
// Selected rows by the user
int selectedRows[] = table.getSelectedRows();
if (selectedRows.length > 0) {
// Every time a row is removed, the array will fill the empty gap moving 1 position all
// items that come after the removed item, so the next position to remove will be
// index + 1, then +2, +3, etc...
int compensation = 0;
// Removes row from selected index and compensates the misalignment
for (int row : selectedRows) {
model.removeRow(row - compensation++);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.