je fais une simple grille qui chaque carré est mis en évidence par le curseur: alt text http://img168.imageshack.us/img168/203/screenshottest.pngJava repeindre est lent dans certaines conditions
Ils sont quelques JPanels, mapgrid et la superposition dans un JLayeredPane, avec mapgrid sur la bas. Mapgrid tire juste à l'initialisation du réseau, sa peinture metodh est:
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);
}
}
Dans la superposition JPanel est l'endroit où la mise en évidence se produit, voici ce qui est repeint lorsque la souris est déplacée:
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);
}
J'ai remarqué que même si la couche de base (mapgrid) n'est PAS repeinte lorsque la souris se déplace, juste la couche de recouvrement transparente, la performance fait défaut. Si je donne à l'overlay JPanel un fond, c'est plus rapide. Si je supprime l'anti-crénelage mapgrid, c'est un peu plus rapide aussi. Je ne sais pas pourquoi donner un fond à la couche de superposition (et ainsi, cacher la mapgrid) ou désactiver l'antialiasing dans la mapgrid conduit à de meilleures performances.
Y a-t-il une meilleure façon de procéder? Pourquoi cela arrive-t-il?
Pourquoi devrais-je changer la façon dont je dessine la grille? La couche inférieure est repeinte même si je n'ai pas spécifié de le faire? –
@Gabriel Toute la fenêtre est mise en mémoire tampon. Si vous en repeignez une partie, tout ce qui contribue à cette section devra être repeint. Il n'y a pas de mise en mémoire tampon par composant (par défaut). –