Изменить цвет рядов, но не все в JTable
-
12-12-2019 - |
Вопрос
Я создал пользовательский класс рендеринга 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(...)
}
Точные детали объясняются в