Java .drawImage : Wie kann ich "unDraw" oder löschen Sie ein Bild?
Brauche ich ein bestimmtes Bild neu gezeichnet werden, an verschiedenen Orten ständig, wie das Programm läuft. Also habe ich eine while-Schleife, die sich bewegen sollen ein Bild über den Bildschirm, aber es zeichnet das Bild auf sich selbst über und über wieder. Was mache ich falsch? Gibt es eine Möglichkeit, löschen Sie das alte Bild vor dem zeichnen in einer neuen location?
JFrame frame = buildFrame();
final BufferedImage image = ImageIO.read(new File("BeachRoad_double_size.png"));
JPanel pane = new JPanel() {
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int num = 0;
boolean fluff = true;
while (fluff == true) {
num = num + 1;
g.drawImage(image, num, 0, null);
if (num == 105) {
fluff = false;
}
}
}
};
frame.add(pane);
Was Sie wahrscheinlich tun möchten ist eingerichtet, die
Sorry, das ist nicht perminate code, ich versuche nur, um herauszufinden, einige Dinge, bevor Sie zu schreiben praktische code.
paintComponent
Methode ziehen Sie einfach an einem Punkt geben, und rufen Sie repaint()
von anderswo.Sorry, das ist nicht perminate code, ich versuche nur, um herauszufinden, einige Dinge, bevor Sie zu schreiben praktische code.
InformationsquelleAutor Saucymeatman | 2013-07-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht code eine Schleife in der paintComponent () - Methode. Wird der code ausgeführt, so schnell, dass das Bild nur gemalt werden, in die endgültige position, die in Ihrem Fall sollte mit einer x-position von 105.
Stattdessen müssen Sie mit einem Swing-Timer, um den Zeitplan der animation, die alle 100 Millisekunden oder so. Dann, wenn der timer feuert, aktualisieren Sie die x-position und ruft repaint() auf dem Bedienfeld. Lesen Sie die Swing-tutorial auf Mit Swing Timer für weitere Informationen.
InformationsquelleAutor camickr
Setzen einer while-Schleife innerhalb einer
paintComponent
Methode ist nicht der Weg, es zu tun. Stattdessen sollte es eine Einrichtung wie die folgende:Damit verschieben Sie das Bild je 10 Millisekunden, wie angegeben, in der Timer-Konstruktor.
Dies schafft zahlreiche Fehler, wenn es sais Timer Timer = ...
Sie verwenden möchten, javax.swing.Timer
1 - 10 Millisekunden kann für eine kurze Zeit-Intervall; 2 - Sie sollten übergeben werden, "dies" als ImageObserver parameter von drawImage
InformationsquelleAutor tbodt
Dies ist ein häufiges Problem, die Menschen erst in der animation haben, wie ich es Tat. Sie können nicht 'entfernen Sie ein Bild" aus dem Bildschirm. Allerdings können Sie repaint den gesamten Bildschirm neu zeichnen dein Bild an eine neue Position.
In psuedocode:
Der obige code löscht den Bildschirm, so dass es sicher für Sie zu zeichnen Ihr Bild. Diese quasi "löscht" dein Bild.
Edit: ich habe nicht gelesen, Ihren code, den ich gerade angesprochen auf Ihre Frage. So andere Antworten, die beheben dein code vermutlich besser als meine.
InformationsquelleAutor Undefined