繁体   English   中英

排除第一行过滤JTable

[英]Exclude first row filtering JTable

过滤JTable时出现问题。 实际上,在第一行中,每列中都有JComboBoxes。 当我对JCombo的项目进行排序时,第一行也将被过滤并消失。

这是我的表格模型:

public static class MyModel extends AbstractTableModel {

    private static final long serialVersionUID = -768739845735375515L;
    private List<Object[]> data;
    private List<String> columnNames;

    public MyModel(List<String> columnNames, List<Object[]> data) {
        super();
        this.columnNames = columnNames;
        this.data = data;
    }

    @Override
    public int getRowCount() {
        return data.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.size();
    }

    @Override
    public String getColumnName(int column) {
        return columnNames.get(column);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {
        return data.get(rowIndex)[columnIndex];
    }

    @Override
    public boolean isCellEditable(int row, int col) { // Pour modifier uniquement la cellule Statut
        if (row == 0) {
            return true;
        } else {
            return false;
        }
    }

    public void setValueAt(Object value, int row, int col) {
        data.get(row)[col] = value;
        fireTableCellUpdated(row, col);
    }

    public void removeRow(int row) {
        data.remove(row);
    }
}

和组合侦听器:

private void ComboListener(final JComboBox comboBox){   
    comboBox.addActionListener(
            new ActionListener(){
                public void actionPerformed(ActionEvent e){
                    try{
                    String selectedItem = comboBox.getSelectedItem().toString();
                    sorter.setRowFilter(RowFilter.regexFilter(selectedItem));
                    }catch(Exception ex){}
                }
            }            
    );
}

我假设您正在谈论基于当前代码进行过滤而不是排序。

创建过滤器时,可以使用int.. indices参数

int[] indices = new int[yourModel.getRowCount() -1];
for (int i = 0; i < indices.length; i++) {
  indices[i] = i+1;
}

sorter.setRowFilter(RowFilter.regexFilter(selectedItem, indices));

这将导致您的过滤器应用于除第0行以外的所有行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM