Altes Bild bei repaint() löschen?

Extremefall

Bekanntes Mitglied
Hallo,
wie kann ich mein altes Bild beim Aufruf der repaint() Methode löschen? So wird das Bild nur neu erzeugt und das alte Bild verschwindet nicht.

Code:
Java:
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.io.File;
import java.io.IOException;
public class Game extends JApplet implements KeyListener{
       BufferedImage img;
       private int linksrechts;
       private int aufab;
  JLabel schriftZug;
  public void init(){
      try {
         img = ImageIO.read(new File("gamer.png"));
      } catch (IOException e) {
      }    
      addKeyListener(this);
      setSize(768,1024);
     setBackground(Color.darkGray);
     schriftZug = new JLabel("Hallo Welt");
     setVisible(true);
     setFocusable(true);

  }
  public void paint( Graphics g) 
  { 
      g.drawImage( img, linksrechts, aufab,80,80, this ); 
  }
public void keyPressed(KeyEvent e) {
    if (e.getKeyChar()== 'd'){
        linksrechts+=5;
        repaint();
    }
}

public void keyReleased(KeyEvent arg0) {    
}
public void keyTyped(KeyEvent e) {
    if (e.getKeyChar()== KeyEvent.VK_E){
    }    
} 
  
}

MFG
 
Mit super.paint(); habe ich es auch schon probiert, nur er meckert beim Parameter. Und null sollte der doch nicht sein oder? Woran könnte das liegen? Ich kann nämlich in der KeyListenerabfrage nicht super.paint(); aufrufen.
 
super-Aufrufe außerhalb der Methode/Konstruktoren macht in dem Kontext ja auch kein Sinn! Du musst das natürlich in deiner (überschriebenen) paint(Component)-Methode aufrufen :autsch:
 
Zuletzt bearbeitet:
Stimmt. Da habe ich gerade falsch gedacht. Danke. Nur eine Frage: Wie kann ich das Flackern verhindern? Bzw. dass das Bild nicht zwischendurch verschwindet wenn die Taste gedrückt wird. Da müsste es ja eine Endlosschleife geben oder lässt sich das auch komfortabler lösen?
 
Zuletzt bearbeitet:
Am besten wäre es, dem Applet nicht in sein paint reinzupfuschen, sondern stattdessen ein JPanel in das Applet zu legen, und in diesem JPanel dann nicht paint sondern paintComponent überschreiben
Code:
class PaintPanel extends JPanel
{
    @Override
    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        ....
    }
}
Dann sollte sich das mit dem Flackern auch erledigt haben (abgesehen davon, dass es komfortabler und flexibler ist ... spätestens, wenn das ganze mal nicht mehr in einem Applet sondern in einem Frame liegen soll...)
 
Ich krieg es leider einfach nicht hin, das Bild mit der Methode paintComponent darzustellen, wie mit der Methode paint. Meine Codezeile: g.drawImage( img, linksrechts, aufab,80,80, this );

Wie lautet da denn der Befehle? Es wird einfach nichts dargestellt?
 
Es funktioniert nun. Danke dafür. Nun noch eine Frage: Gibt es eine Methode, die die Position des Paintobjektes zurück gibt? Mit getLocation funktioniert es nicht, da die Methode dafür nicht gedacht ist.

MFG
 

Zurück
Oben