2016-01-26 2 views
0

я следующее средство визуализации и подсказки в пределах моего методарендерер после фильтра, строки больше не выделены

tableR = new JTable(modelR) 
{ 
    @Override 
    public Component prepareRenderer(TableCellRenderer renderer, int row, int column) { 
     Component c = super.prepareRenderer(renderer, row, column); 

     Font myFont = new Font("Arial",Font.PLAIN,10); 
     Font myFont1 = new Font("Arial", Font.BOLD,10); 
     if (!isRowSelected(row)) { 
      if (tableR.getColumnCount() >= 0) { 
       String type = (String) getModel().getValueAt(row, 11); 
       c.setBackground("0.0".equals(type) ? Color.RED : Color.WHITE); 
       c.setForeground("0.0".equals(type) ? Color.WHITE : Color.BLACK); 
       c.setFont("0.0".equals(type) ? myFont1: myFont); 
      } 
     } 

     return c; 
    } 

    @Override 
    public String getToolTipText(MouseEvent e) { 
     String tip = null; 
     java.awt.Point p = e.getPoint(); 
     int rowIndex = rowAtPoint(p); 
     int colIndex = columnAtPoint(p); 
     int realColumnIndex = convertColumnIndexToModel(colIndex); 

     if (realColumnIndex != 20) { //Sport column 
      tip = " " + getValueAt(rowIndex, colIndex); 
      //tip = super.getToolTipText(e); 
     } 
     return tip; 
    } 
}; 

Это будет применяться после каждого обновления метода, который происходит каждые 10 секунд.

У меня также есть метод фильтра слушателя на столе этого принимает вид:

private void filter2method() { 

    filterR.getDocument().addDocumentListener(new DocumentListener() { 

    @Override 
    public void insertUpdate(DocumentEvent e) { 
newFilter(); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent e) { 
    newFilter(); 
    } 

    @Override 
    public void changedUpdate(DocumentEvent e) { 
newFilter(); 
    } 

    private void newFilter() { 
    RowFilter <DefaultTableModel, Object>rf =null; 
    try { 
     rf = RowFilter.regexFilter(filterR.getText(),2); 
    } catch (java.util.regex.PatternSyntaxException e) { 
     return; 
    } 
    sorter.setRowFilter(rf); 


    } } 

    ); 
    } 

Однако при фильтрации не мой стол рендерер больше не выделяет правильные строки в красном ..ie те, которые являются 0,0

Как с этим справиться? Нужно ли мне удалить рендер, а затем повторно применить его? Должен ли я включить метод рендеринга в метод фильтра. Помогите оценить.

ответ

2

В рендерере отображаются индексы представления, а не индексы моделей. Вы используете вид-индекс для индекса модели в отчете String type = (String) getModel().getValueAt(row, 11);

КРП-заявлении, где вы установите цвет следует читать:

int rowModelId = convertRowIndexToModel(row); 
if (!isRowSelected(row)) { 
    if (tableR.getColumnCount() >= 0) { 
     String type = (String) getModel().getValueAt(rowModelId , 11); 
     c.setBackground("0.0".equals(type) ? Color.RED : Color.WHITE); 
     c.setForeground("0.0".equals(type) ? Color.WHITE : Color.BLACK); 
     c.setFont("0.0".equals(type) ? myFont1: myFont); 
    } 
} 

Вы также написали его, чтобы получить значение ячейки с помощью JTable.getValueAt (этот метод принимает вид-индексы), чтобы избежать необходимости использовать метод convertRowIndexToModel следующим образом:

if (!isRowSelected(row)) { 
    if (tableR.getColumnCount() >= 0) { 
     String type = (String) getValueAt(row, 11); 
     c.setBackground("0.0".equals(type) ? Color.RED : Color.WHITE); 
     c.setForeground("0.0".equals(type) ? Color.WHITE : Color.BLACK); 
     c.setFont("0.0".equals(type) ? myFont1: myFont); 
    } 
} 
+0

@ TT визуализатор прекрасно работает, однако проблема заключается в том, что после того, как я фильтровать таблицу в качестве документа слушателя, блика нет вот nger подсвечивает правильную строку, потому что в таблице теперь меньше строк. Мне нужна подсветка, чтобы выделить новую отфильтрованную таблицу. – Ingram

+0

@MrAssistance Позвольте мне сначала спросить, применили ли вы обе версии того, что я ответил, и вы видели одно и то же поведение в обоих случаях? –

+0

@ TT У меня нет ничего, потому что я не думаю, что проблема кроется здесь - проблема в том, что после того, как я набираю фильтр, он фильтрует модель таблицы, а затем выделенные строки больше не выделяют правильные строки. Я думаю, потому что подсветка фиксирована на текущей таблице. – Ingram

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