我想在选择时一次删除多行。
这是我的代码:
int[] indexList = queryTable.getSelectedRows();
queryTableModel.removeRows(indexList);
queryTable.clearSelection();
SwingUtilities.updateComponentTreeUI(queryTable);
请帮忙。
答案 0 :(得分:2)
以下是从模型中删除所选行的简单示例:
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();
}
}
答案 1 :(得分:2)
假设您使用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);
}
永远不要忘记将所选索引从 视图 转换为 模型 。否则,如果对表进行排序,则会出现问题。
如果您使用的是自定义TableModel,则流程几乎相同,不会有很大差异。
此外,您无需在添加/删除/更新数据后更新 视图 , 模型 会在此类活动中通知 视图 ,最后一个会相应更新。
有关详细信息,请参阅How to use Tables教程。
答案 2 :(得分:2)
如何从java中的beantablemodel中删除多行?
Java中没有BeanTableModel。
如果您恰好引用此Bean Table Model,则可以使用removeRows(...)
方法。
答案 3 :(得分:0)
// 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++);
}
}