Привет всем,
Я пытаюсь сделать некоторые вычисления в JTable после итерации и пометить другим фоном нужные мне ячейки.
Однако на данный момент у меня есть 2 проблемы:
1) Ячейки закрашиваются не сразу, а после всего цикла итерации
2) Области не закрашиваются должным образом - если мне нужно закрасить table[3, 4] и table[6, 5] он рисует прямоугольник от [3,4] до [6, 5] вместо того, чтобы рисовать только отдельные ячейки.
О проблеме 1: могу ли я вызвать repaint() с приоритетом без необходимости заканчивать все и JVM решать, когда рисовать? Я пытаюсь сделать fireTableCellUpdated()
и fireTableDataChanged()
, но они не обновляются.
Вот мой пользовательский метод рендеринга ячеек, который изменяет BGcolor:
public Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row,int column) {
Component renderer = super.getTableCellRendererComponent(
table, value, isSelected, hasFocus, row, column);
if(value instanceof Color) {
Color c = (Color) value;
renderer.setBackground(c);
System.out.println("BG change [" + row + ":" + column + "]");
}
return renderer;
}
Здесь есть цикл, в котором я рисую свои ячейки по нажатию кнопки:
for(int paintJ = startIndex; paintJ < endIndex; paintJ++) {
CrossCellRenderer rend = (CrossCellRenderer) jTable1.getCellRenderer(i, paintJ)
.getTableCellRendererComponent(jTable1, Color.blue, true, true, i, paintJ);
crossTableModel.fireTableCellUpdated(i, paintJ);
jTable1.revalidate();
jTable1.repaint();
try {
Thread.sleep(1000);
} catch(InterruptedException ie) {
System.err.println("Exception sleeping the thread.");
}
}
Любые советы по этому поводу?