2010-03-03 6 views
1

J'ai un JApplet Java intégré dans une page Web. La fenêtre JApplet contient une instance unique d'une classe qui étend JPanel - de la même taille que JApplet. L'applet peut générer des fenêtres contextuelles (JFrames) lorsque l'utilisateur clique sur un bouton du panneau.Java Applet scintille sur focusLost et focusGained

Chaque fois que je clique sur un bouton pour faire apparaître une fenêtre, mon applet scintille à mesure qu'elle repeint. Il fait également la même chose quand je clique dessus encore ou quand il a eu le foyer et je clique sur une fenêtre différente - ma conclusion: c'est un repaint qui est forcé sur les événements focusLost() et focusGained().

j'applique le double buffering dans la peinture du panneau méthode() comme ceci:

@Override 
public void paint(Graphics g) 
{ 
    if(resized) 
    { 
     offscreen = createImage(getWidth(),getHeight()); 
     resized = false; 
    } 

    Graphics offscreenG = offscreen.getGraphics(); 

    /// DRAW HERE: 

    // paint the main window contents: 
    view.paint(offscreenG); 
    // paint the child components of our panel. 
    super.paint(offscreenG); 

    /// FRAW FINISHED 

    g.drawImage(offscreen,0,0,this); 
    offscreenG.dispose(); 
} 

L'objet de la vue est pas un composant swing mais juste une classe qui sait chaud pour dessiner tout sur un objet graphique.

La méthode paint() de JApplet n'est pas substituée.

Je pourrais probablement remplacer les méthodes focusGained/focusLost de mon JApplet pour éviter de repeindre - mais je préférerais entendre une meilleure solution au problème.

Répondre

1

Il n'est pas nécessaire d'implémenter la double mise en mémoire tampon, ceci est fait automatiquement par Swing. Vous construisez une applet de la même manière que vous construisez une application. C'est-à-dire que vous ajoutez des composants au volet de contenu du JApplet.

Si vous devez effectuer une peinture personnalisée, remplacez la méthode paintComponent() d'un JPanel et ajoutez le panneau à l'applet. Lisez la section du tutoriel Swing sur Custom Painting pour des exemples.

+0

merci - très utile! – Warlax