Hallo,
ich schreibe kleines Viergewinnt im moment und da soll eine Animation zum bällle fallen stattfinden.
Dazu ruffe ich meinen Theard auf:
So SpielFeld2 ist eine eigenes JPanel:
der Theard sieht so aus:
Mein Problem ist dass der Hintergrund nur am Ende der For-Schleife einmal gezeichnet wird, es sollte aber bei jedem Duchlauf gezeichnet werden mit den übergebenen Werten.
Kann mir vllt einer sagen woran es liegt?
ich schreibe kleines Viergewinnt im moment und da soll eine Animation zum bällle fallen stattfinden.
Dazu ruffe ich meinen Theard auf:
Java:
Fallen bFallen = new Fallen(spielFeld2, zaehler, 3, felder,
"bilder/ballgelb.png");
bFallen.run();
So SpielFeld2 ist eine eigenes JPanel:
Java:
package Version2;
import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JPanel;
public class SpielfeldPanel extends JPanel {
private static final long serialVersionUID = 1L;
private Image image;
private int x = 0;
private int y = 0;
public void setImage(Image image,int breite,int hoeche) {
this.image = image;
x = breite;
y = hoeche;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, x, y, this);
}
}
der Theard sieht so aus:
Java:
package Version2;
import java.awt.Toolkit;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
* Vier Gewinnt
*
* @version 2
* @author XXXXXXXXXXX
*
* 03.2010
*
* Die Animation der fallenden Steine wird hier durchgeführt
*
*/
public class Fallen extends Thread {
private SpielfeldPanel spielfeld;
private int spalte = 0;
private int zeile = 0;
private JLabel[] buttons;
private String ball;
/**
* Construcktor von Fallen
*
* @param spielFeld
* {@link JPanel} Panel wo die Bälle angezeigt werden sollen
* @param zaehler
* {@link Integer} Spalten nummer
* @param zeile
* {@link Integer} Zeilen nummer
* @param felder
* {@link JLabel} Die Buttons der Spalten als Array
* @param ball
* {@link String} Strind der den Internenlink zum Ballbild
* enthält
*/
public Fallen(SpielfeldPanel spielFeld, int zaehler, int zeile, JLabel[] felder,
String ball) {
spielfeld = spielFeld;
spalte = zaehler;
this.zeile = zeile;
buttons = felder;
this.ball = ball;
}
/**
* Überschreiben der run()-Methode von einem Theard
*
* Die Animation findet hier statt
*/
public void run() {
int y = 12 + (zeile * 64);
int x = 8 + (spalte * 60);
for (int i = 1; i <= y; i++) {
// male Ball auf dem Hintergrund vom Spielfeld
spielfeld.setImage(Toolkit.getDefaultToolkit().getImage(
getClass().getResource(ball)),x ,i);
spielfeld.repaint();
System.out.println("I:" + i + " X:" + x + " Y:" + y);
try {
sleep(1);
} catch (InterruptedException ie) {
// ...
}
}
}
}
Mein Problem ist dass der Hintergrund nur am Ende der For-Schleife einmal gezeichnet wird, es sollte aber bei jedem Duchlauf gezeichnet werden mit den übergebenen Werten.
Kann mir vllt einer sagen woran es liegt?
Zuletzt bearbeitet von einem Moderator: