Hy каждый,
Я пытаюсь выполнить некоторые вычисления в JTable после итерации и пометить различным фоном нужные мне ячейки.
Однако у меня сейчас 2 проблемы:
1) Ячейки окрашиваются не сразу, а после всего цикла итерации
2) Области не окрашены должным образом - если мне нужно нарисовать таблицу [3, 4] и таблицу [6, 5], она рисует прямоугольник от [3,4] до [6, 5] вместо того, чтобы рисовать только отдельные клетки ,
О проблеме 1: могу ли я вызвать repaint () с приоритетом без необходимости завершать все и JVM решать, когда рисовать? Я пытаюсь сделать fireTableCellUpdated()
и fireTableDataChanged()
, но они не обновляются.
Здесь есть мой метод визуализации ячеек, который изменяет цвет BG:
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.");
}
}
Есть какие-нибудь советы по этому поводу?