2008-12-22 8 views
0

J'ai une applet Java (JApplet). Cette applet utilise un composant JComponent (PanelAux) pour afficher les valeurs et les images qui changent périodiquement. Mais l'applet ne se rafraîchit pas. Que puis-je faire pour rafraîchir mon applet?Problèmes d'actualisation Java Applet

//--------------------------------------------RUN 

public void run() 
    while (true) { 
     try { 
      myThread.sleep(1000); 
     } 
     catch (InterruptedException e){ 
     }  
     repaint(); 
    } 
} 
//--------------------------------------------PAINT 
public void paint(Graphics g) 
{  

    dim = new Dimension(image.getWidth(this)+50,image.getHeight(this)+50); 
    this.resize(dim); 
    this.setMaximumSize(dim); 
    this.setMinimumSize(dim); 

    PanelAux panel = new PanelAux(image); //JComponent 

    add(panel); 

    super.paint(g); 
} 

Merci

Répondre

4

Appelez-vous en fait la méthode d'exécution() à tout lieu de commencer une discussion qui l'utilise?

Aussi: vous ne voulez certainement pas ajouter de nouveaux composants dans votre méthode paint()! C'est crier pour des problèmes!

+0

Ou redimensionner et définir la taille minimale et maximale. –

1

Vous ne devez pas remplacer la peinture (graphique g).

Existe-t-il des exceptions d'erreur dans la console de l'applet?

3

En règle générale, l'article Painting in AWT and Swing décrit comment vous devez gérer la repeinte en AWT ou Swing.

Puisque vous avez mentionné que vous utilisez un JApplet, la section sur "Painting in Swing" va être relavent ici. Plus précisément, avec Swing, plutôt que de surcharger la méthode paint(Graphics g), la méthode paintComponent(Graphics g) doit être utilisée à la place, avec un appel à la méthode paintComponent de la superclasse. Je cite la section "Paint Methods":

programmes Swing doivent remplacer paintComponent() au lieu de passer outre paint().

En effet, la méthode paint elle-même est décomposé en trois méthodes distinctes, se substituant la méthode paint signifie qu'il empêchera les appels vers le paintComponent, paintBorder et paintChildren de la classe actuelle et ses classes ancêtres.

En outre, pour que la méthode run() à invoquer, votre JApplet devrait mettre en œuvre Runnable et ont également une nouvelle Thread de quelque part dans invoquaient votre applet. (probablement dans les deux méthodes init ou start.)

Edit:

Il convient également de noter que la méthode paintComponent va être appelé à tout moment l'écran doit être rafraîchi. La méthode paintComponent sera appelée plusieurs fois, de sorte que saua points out, ce ne serait pas une très bonne idée d'instancier de nouveaux objets dans la méthode paintComponent elle-même.

En outre, il semble que la conception est d'avoir un thread séparé (comme l'applet semble implémentant l'interface Runnable, comme le laisse entendre de la présence de la méthode run), la mise à jour de l'état de JComponent pourrait prendre placer dans la méthode run elle-même, avec un appel à la méthode repaint si nécessaire.