показать определенные строки в java JTable

У меня есть таблица Java, а TableModel.each row(element) имеет идентификатор. Я хочу показать конкретные идентификаторы. Как можно отфильтровать эти элементы? Выбранные идентификаторы могут быть изменены.

Например:

public class L {
int id;
String name;
String family;
}

//----

private static final String[] columnNames = { "name","family"};
private static final Class[] columnClasses = {class.String.class,String.Class};
private Vector<L> list = Vector<L>();

list.add(new L(1,"A","b"));
.
.
.
list.add(new L(100,"AB","aa");

Я хочу показать элементы с этими идентификаторами, например {1 39 45 55 22}.

Как фильтровать эти идентификаторы?


person Nasir    schedule 10.04.2013    source источник
comment
stackoverflow.com/ вопросы/1107911/   -  person jalopaba    schedule 10.04.2013
comment
вы уверены, что вы переопределили getColumnClass с помощью Class[] columnClasses = {Integer.class,String.Class};, чтобы лучше помочь, скорее опубликуйте SSCCE, короткий исполняемый компилируемый   -  person mKorbel    schedule 10.04.2013


Ответы (1)


Вы можете сделать это с помощью RowFilter и TableRowSorter:

final int[] ids = new int[]{1, 39, 45, 55, 22};
RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
  public boolean include(Entry entry) {
    L currentObject = (L) (entry.getValue(0));
    for(int i=0;i<ids.length;i++){
        if(currentObject.getId()==ids[i]){
            return true;
        }
    }
    return false;
  }
};

TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
sorter.setRowFilter(filter);
yourTable.setRowSorter(sorter);

Проверено, у меня работает

Надеюсь это поможет

person BackSlash    schedule 10.04.2013
comment
@nasir Вы просите отфильтровать свои строки по идентификатору, поэтому этот код всегда будет работать, независимо от того, сколько полей вы добавите в свой класс. - person BackSlash; 12.04.2013
comment
Я добавляю семейное поле и удаляю идентификатор из таблицы, но идентификатор существует в классе L. запись получить столбцы table.ID не является таблицей столбцов. и когда я запускаю программу, она не может преобразовать String (entry.getValue (0)) в класс L. :( - person Nasir; 12.04.2013
comment
list.add(new L(1,"A","b")); Добавляет объект L в вашу таблицу, если entry.getValue(0) является строкой, это означает, что вы не опубликовали реальный код. - person BackSlash; 12.04.2013
comment
благодаря Harlandraka, я изменил свой код на ==› private static final String[] columnNames = {ID,name,family}; закрытый статический окончательный класс [] columnClasses = {Long.class, String.class, String.Class}; а затем удалите столбец идентификатора в myTable, затем используйте свой код. myTable.removeColumn(myTable.getColumnModel().getColumn(0)); еще раз спасибо. - person Nasir; 12.04.2013