2014-12-25 6 views
0

Я использую пользовательский класс, расширяющий RowFilter фильтровать свою таблицу на основе логического значения в столбцеJTable RowFilter отображает неправильные строки

public class MyRowFilter extends RowFilter<Object, Integer> { 

    @Override 
    public boolean include(Entry entry) { 

     return (boolean) entry.getValue(0)); 
    } 
} 

Поручаю его к столу в качестве такого

TableRowSorter<TableModel> tableRowSorter = new TableRowSorter(); 
myRowFilter = new MyRowFilter(myTableModel); 
tableRowSorter.setRowFilter(myRowFilter); 
myTable.setRowSorter(platformTableRowSorter); 

Но то, что я получаю в форме, - это только первое N (количество времени include() возвращено true) строки myTable вместо тех, для которых include() возвращено true.

Что может вызвать такое поведение?

+0

Вы уверены, что ваши ценности не в правильном порядке? При упорядочении чисел, которые являются строками, строки будут упорядочены по алфавиту, а не по порядку нумерации –

+0

@Desolator их порядок верен, что неправильно - это строки, которые отображаются, только один из них соответствует фильтру. – NekoiNemo

+0

для лучшей помощи скорее отправить SSCCE/MCVE, короткий, выполнимый, компилируемый, с жестким кодом для JTable, XxxTableModel в локальной переменной – mKorbel

ответ

0

String table_event = table_job.getModel().getValueAt(table_job. 
 
          convertRowIndexToModel(row), 0).toString());

+0

Спасибо! Оказывается, я перепутал индексы строк в рендеринге. – NekoiNemo

0

import javax.swing.JFrame; 
 
import javax.swing.JScrollPane; 
 
import javax.swing.JTable; 
 
import javax.swing.RowFilter; 
 
import javax.swing.table.DefaultTableModel; 
 
import javax.swing.table.TableModel; 
 
import javax.swing.table.TableRowSorter; 
 

 
public class JTableFilterDemo { 
 
    public static void main(String[] args) { 
 
    Object[][] data = { { "A", 5 }, { "B", 2 }, { "C", 4 }, { "D", 8 } }; 
 
    String columnNames[] = { "Item", "Value" }; 
 
    TableModel model = new DefaultTableModel(data, columnNames) { 
 
     public Class<?> getColumnClass(int column) { 
 
     return getValueAt(0, column).getClass(); 
 
     } 
 
    }; 
 
    JTable table = new JTable(model); 
 

 
    RowFilter<Object, Object> filter = new RowFilter<Object, Object>() { 
 
     public boolean include(Entry entry) { 
 
     Integer population = (Integer) entry.getValue(1); 
 
     return population.intValue() > 3; 
 
     } 
 
    }; 
 

 
    TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model); 
 
    sorter.setRowFilter(filter); 
 
    table.setRowSorter(sorter); 
 
    JScrollPane scrollPane = new JScrollPane(table); 
 
    JFrame frame = new JFrame("Filtering Table"); 
 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 
    frame.add(scrollPane); 
 
    frame.setSize(300, 200); 
 
    frame.setVisible(true); 
 
    } 
 
}

Смотрите этот код

Смежные вопросы