Вопрос

Я создал пользовательский класс рендеринга Cable для достижения этого.

public class MatchTableCellRenderer extends DefaultTableCellRenderer{


    public Component getTableCellRendererComponent (JTable table,
                                                    Object obj, boolean isSelected, boolean hasFocus, int row, int column) {
        Component cell;
        cell = super.getTableCellRendererComponent(
                table, obj, isSelected, hasFocus, row, column);
        if( ((String[]) ((MatchTableModel) table.getModel()).getRow(row)).length==7 ){
            System.out.println(((String[]) ((MatchTableModel) table.getModel()).getRow(row))[0]+" "+((String[]) ((MatchTableModel) table.getModel()).getRow(row))[6]);

            cell.setForeground(Color.green);

        }
        return cell;
    }


}
.

И я установил этот рендер, который будет использоваться столбцами моих столов:

    tempColumn = table.getColumnModel().getColumn(0);
    tempColumn.setCellEditor(new MacColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(1);
    tempColumn.setCellEditor(new IpColumnEditor());
    tempColumn.setCellRenderer(new MatchTableCellRenderer());

    tempColumn = table.getColumnModel().getColumn(2);
    DefaultCellEditor dfEditor=new DefaultCellEditor(new JTextField());
    dfEditor.setClickCountToStart(2);
    tempColumn.setCellEditor(dfEditor);
    tempColumn.setCellRenderer(new MatchTableCellRenderer());
.

Я хочу строки, которые содержат строку [] длины= 7 зеленых и остальных с цветом по умолчанию.Но интересно, что все мои ряды становятся зелеными.У меня есть линия печати, как вы можете видеть.Напечатано 4 раза (у моего стола 12 строк), но все строки сделаны зелеными, а не 4. Что я делаю не так?

Это было полезно?

Решение

Причина - это печально известная цветовая память (TM) по умолчаниюTableCellEditor: вы должны устанавливать цвета всегда , а не только в одной ветке.

if (myCondition) {
   setBackground(...) {
} else {
   setBackground(...) 
} 
.

Точные детали объясняются в Недавняя тема

Другие советы

Вы можете использовать XxxCellRenderer, но лучше и простое - использовать prepareRenderer()

Для правильного кода вы должны переопределить или тестировать внутри, если иначе следует пататорам

    .
  • Isselected

  • hasfocus

  • Столбец

  • ряд

    Подробнее в Ответы и question О Similair Проблема

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top