Я делаю простую сетку, каждый квадрат которой подсвечивается курсором:
альтернативный текст http://img168.imageshack.us/img168/203/screenshottest.png
Это пара JPanels, mapgrid и overlay внутри JLayeredPane, с mapgrid внизу. Mapgrid просто рисует при инициализации сетки, его метод рисования выглядит так:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
for (int i = 0; i < h; i++) {
for (int j = 0; j < w; j++) {
g2d.setColor(new Color(128, 128, 128, 255));
g2d.drawRect(tileSize * j, i * tileSize, tileSize, tileSize);
}
}
В наложении JPanel происходит выделение, это то, что перерисовывается при перемещении мыши:
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setColor(new Color(255, 255, 128, 255));
g2d.drawRect((pointerX/tileSize)*tileSize,(pointerY/ tileSize)*tileSize, tileSize, tileSize);
}
Я заметил, что хотя базовый слой (mapgrid) НЕ перекрашивается при перемещении мыши, только прозрачный оверлейный слой, производительности не хватает. Если я наложу фон JPanel наложения, он будет быстрее. Если я удаляю сглаживание на карте, его тоже немного быстрее.
Я не знаю, почему предоставление фона наложенному слою (и, следовательно, скрытие сетки карт) или отключение сглаживания в сетке карт приводит к гораздо лучшей производительности.
Есть ли лучший способ сделать это? Почему это происходит?