repaint() en Java n'est pas “re-peindre” immédiatement?

J'ai un code comme ça:

//In MyPanel.java
public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    //Draw something
    mypanel_count++;
}

//In Test.java
public void testLargeData()
{
    while (notDone)
    {
        panel.repaint();
        //do huge work
        test_count++;
        System.out.println("Test_count: " + test_count + ", MyPanel_count: " + mypanel_count);
    }
}

//Output !!!
Test_count: 752, MyPanel_count: 23
Test_count: 753, MyPanel_count: 23
Test_count: 754, MyPanel_count: 23
Test_count: 755, MyPanel_count: 24

Mais quand je change de panel.repaint() à panel.paintComponent(panel.getGraphics()), la sortie est à droite:

Test_count: 752, MyPanel_count: 752
Test_count: 753, MyPanel_count: 753
Test_count: 754, MyPanel_count: 754
Test_count: 755, MyPanel_count: 755

Pourquoi? paintComponent méthode fonctionne, mais il est parfois aveugle, donc je ne veux pas l'utiliser. Quelqu'un peut me donner des suggestions? Merci!

  • stackoverflow.com/questions/9389187/....
  • merci pour votre réponse, mais ce n'est pas mon problème.
  • avez-vous essayé JComponent.html#paintImmediately(int, int, int, int)
  • paintImmediately(...) comme suggéré par mKorbel devrait aider.stackoverflow.com/questions/4120528/repaint-in-a-loop. Je sais que ce n'est pas une réponse. Mais je suppose que la solution est de threads.
  • SwingUtilities.invokeLater ne fonctionne pas pour moi.
  • Carley question dans le présent formulaire n'est pas answearble, il y a un peu de code, toutes les méthodes pour comparisions test, ni un SSCCE, que voulez vous attend,
  • Je veux trouver une solution pour les "re-peindre" immédiatement, pas aveugle, que tous. paintImmediately parfois aveugles.
  • Carley nous pouvons travaille avec donné d'infos, sinon ce sera seulement votre question personnelle, personne ne le sait ... quoi de représentant de code affiché dans votre questiod, les idées, le scénario, voler vers la lune ???, pourquoi, ce s'il vous plaît, pour mieux aider plus tôt post un SSCCE, bref, praticable, compilable, juste au sujet de h décrit problème,
  • Carley dans tous les cas repeindre devrait être la dernière ligne de code, préparer tous les Objets, les mettre l'Objet dans le Tableau, à l'intérieur de paintComponent boucle dans le Tableau, puis d'appeler la repeindre, tout, tout une autre ligne de code, de plus, est inutile, simple de tout préparer avant, aucune idée à ce sujet
  • Merci pour votre suggestion.

InformationsquelleAutor Bood Carley | 2012-11-19