簡體   English   中英

如何從java中的beantablemodel中刪除多行?

[英]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 ,則過程幾乎相同,不會有很大差異。

此外,在添加/刪除/更新數據后,您無需執行任何操作來更新視圖模型會在此類事件中通知視圖,並且最后一個將相應地更新。

有關更多詳細信息,請參閱如何使用表格教程。

如何從java中的beantablemodel中刪除多行?

Java 中沒有 BeanTableModel。

如果您碰巧指的是這個Bean 表模型,那么您可以使用removeRows(...)方法。

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM