Le code suivant affiche juste un canevas dans une fenêtre qui vient remplir son contenu avec du rouge. Cependant, lors du redimensionnement de la fenêtre, il scintille beaucoup, car avant chaque repeindre, la toile semble s'effacer. Après un peu de recherche triviale, il semblait être parce que la méthode update()
a appelé g.clearRect()
, mais j'ai remplacé cela maintenant et le scintillement reste là, la toile s'efface encore avant de repeindre. J'ai joué avec la double mise en mémoire tampon et, pour autant que je sache, cela ne semble pas régler les choses - je ne suis pas sûr de l'utilité que cela aurait de toute façon puisque le problème semble être de prévenir la toile du défrichement avant sa repeinte.Arrêter le canevas Java d'effacer sur repaint
En aparté avant tout le monde se précipite et suggère, je ai utiliser Canvas dans ce cas, pas JPanel, parce qu'à un autre moment, je suis en utilisant le même canevas pour la vidéo natif de jouer avec VLCJ.
public class MyCanvas extends Canvas {
@Override
public void update(Graphics g) {
paint(g);
}
@Override
public void paint(Graphics g) {
//By the time we get here, the canvas has been cleared to its background colour
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
}
public static void main(String[] args) {
JFrame frame = new JFrame();
MyCanvas c = new MyCanvas();
frame.add(c);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}
Comment avez-vous implémenté la double mise en mémoire tampon? Je pense que cela ne devrait pas dessiner le rectangle blanc puisque vous avez outrepassé la méthode qui l'a causé ... J'ai essayé le code sur mon ordinateur et ça marche bien. – zeller
@zeller Avez-vous essayé le code tel quel ou sans double tampon? Je viens d'utiliser une approche triviale avec l'échange d'images plutôt que construit dans des stratégies de tampon lorsque je l'ai essayé, mais il n'y avait pas de changement. – berry120
sans double tampon. Il scintille, mais ce n'est pas dû au dessin du rectangle blanc. Je pense que vous devriez essayer la bufferstrategy intégrée, voici un article qui pourrait vous aider: http://stackoverflow.com/questions/5924697/java-double-buffering – zeller