我在过滤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){}
}
}
);
}
答案 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行以外的所有行。