如何从Java的beantablemodel中删除多行?

问题描述 投票:-1回答:4

我想一次删除多个行。

这是我的代码:

            int[] indexList = queryTable.getSelectedRows();
            queryTableModel.removeRows(indexList);
            queryTable.clearSelection();
            SwingUtilities.updateComponentTreeUI(queryTable);

请帮助。

java swing jtable tablemodel
4个回答
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();
    }

}

2
投票

如何从Java中的beantablemodel中删除多行?

Java中没有BeanTableModel。

如果碰巧要引用此Bean Table Model,则可以使用removeRows(...)方法。


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);
}

永远不要忘记将所选索引从view转换为model。否则,如果对表进行排序,就会遇到问题。

如果使用自定义TableModel,则过程几乎相同,不会有太大差异。

此外,在添加/删除/更新数据后,您无需执行任何操作来更新viewmodel将通知查看在此类事件中,最后一个将相应更新。

有关更多详细信息,请参见How to use Tables教程。


0
投票
int selectedRows[] = table.getSelectedRows();

        int compensation = 0;

        for (int row : selectedRows) {
            model.removeRow(row - compensation++);
        }
© www.soinside.com 2019 - 2024. All rights reserved.