Я ищу решение этой проблемы: у меня есть файл excel, содержащий данные. Некоторые ячейки имеют желтый фон. Я уже создал код для импорта текста в JTable, который отлично работает. Но я хочу также импортировать фоновый цвет ячейки в определенные ячейки. Для простоты этого примера я не использовал циклы, чтение данных excel из исходников и т. д. Почитав форум, я понял, что мне нужен CustomCellRenderer.
У меня есть проблема с этим подходом, потому что этот код сначала правильно окрашивает ячейки в столбце, но когда я начинаю прокручивать цветные ячейки в этой таблице, он перекрашивает весь столбец в желтый цвет. (см. скриншот)
Я подумал, что могу добавить оператор else, чтобы специально окрашивать оставшиеся ячейки в белый цвет, но этот подход не сработает для меня, потому что я перезапишу свои предыдущие результаты ячеек.
Можете ли вы указать мне решение по этому вопросу? (это ошибка или ожидаемое поведение JTable?). Я использую NetBeans и генератор перетаскивания GUI
import java.awt.Color;
import java.awt.Component;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
public class MyRenderer extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
int[][] coordinatesYellow = new int[3][2];
//[row][column] these cells are yellow
coordinatesYellow[0][0] = 3;
coordinatesYellow[0][1] = 2;
coordinatesYellow[1][0] = 4;
coordinatesYellow[1][1] = 2;
coordinatesYellow[2][0] = 2;
coordinatesYellow[2][1] = 2;
for (int i = 0; i < 3; i++) {
if ((row == coordinatesYellow[i][0]) && (column == coordinatesYellow[i][1])) {
c.setBackground(Color.yellow);
}
}
return c;
}
}
// And this is the statement I use for calling the renderer:
// resultsTable.getColumnModel().getColumn(0).setCellRenderer(new MyRenderer());