排除第一行过滤JTable

时间:2014-05-16 14:56:47

标签: java swing jtable jcombobox

我在过滤JTable时遇到了问题。实际上,在我的第一行中,每列都有JComboBox。当我排序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){}
                }
            }            
    );
}

1 个答案:

答案 0 :(得分:0)

我假设您正在谈论过滤,而不是根据您当前的代码进行排序。

您可以在创建过滤器时使用int.. indices argument

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行以外的所有行。