Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo
Ich habe nun schon seit gestern ein Problem,auf dessen Lösung ich nicht komme.Ich habe mich nämlich letztens an Threads herangewagt,und wollte/will eine kleine Wolke Programmieren,die über den Bildschirm fliegt.Leider will sich die Wolke nicht bewegen.Die Klasse in der die Wolke erstellt worden ist,erbt von der Klasse JLabel.Die Wolke ist ebenfals als Label in einem JPanel Dargestellt.
Hier mal der Code
Java:
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JLabel;
public class jWolkenThread extends JLabel implements Runnable {
public int x=0;
private Image Wolken;
private boolean vor=true;
public jWolkenThread() {
try {
Wolken = ImageIO.read(new File("C:/Users/Admin/workspace/Bergsteigerspiel/src/Wolke.png"));
} catch (IOException e) {
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(Wolken, 0, 0, null);
repaint();
}
@Override
public void run() {
while(true){
synchronized (this) {
if (x > getWidth() - Wolken.getWidth(this)) {
vor = false;
} else if (x <= 0)
vor = true;
if (vor) {
x += 1;
}
}
repaint();
try{
Thread.sleep(20);
} catch (InterruptedException e){
break;
}
jWolkenThread t= new jWolkenThread();
Thread wolken = new Thread(t);
wolken.start();
}
}
}
Du musst auch die Wolke bewegen. Momentan veränderst du nur Variablen, die als Vorlage für die Koordinaten dienen sollen aber nicht die Koordinaten selbst.
Die Zeichneposition in paintComponent() musst du von x abhängig machen.
Du musst auch die Wolke bewegen. Momentan veränderst du nur Variablen, die als Vorlage für die Koordinaten dienen sollen aber nicht die Koordinaten selbst.
Die Zeichneposition in paintComponent() musst du von x abhängig machen.
Erstmal bitte Variablen immer klein und Klassennamen immer groß. Beide nach dem KamelCase.
Das ist eigentlich so einfach, dass ich dir nicht direkt die Lösung sagen werde.
Es ist das drawImage(...), wo du ein Zeichen austauschen musst. Dann müsste es hinhauen.
das repaint() bewirkt das neuzeichnen des fensters. paintComponent zeichnet neu. Da gehört das repaint nicht hin, denn wenn du gerade gezeinet hast, muss ja nicht sofort neugezeichnet werden. das repaint gehört in den Thread in dem du deine Variable änderst
Hast du schon mal debugged? Für den Code mal mit dem Debugger zeilenweise durch.
Ich kann grade leider nicht selber testen, da ich mit dem Handy online bin.
Da kam auch nichts.Ist mit der while Schleife von der Logik her auch alles richtig,würde sich die Wolke nach rechts bewegen?Ich mache dann auch ersmal für heute Feierabend.,und suche morgen weiter nach einer Lösung ;-)
LG Pansa