Hätte mal eine Frage. Heute haben wir im Unterricht das Thema GUI begonnen und unsere erste Aufgabe bestand darin, ein Fenster zu basteln, wo vier kleiner Rechtecke zu sehen sind, die sich alle 250 ms um 5 Pixel schräg auseinander bewegen. Das die sich bewegen, jabe ich soweit hinbekommen. Doch wie bekomme ich es hin, dass der Timer stoppt, sobald eines der vier Rechtecke den Rand berührt.
Meine Idee wäre es, in Zeile 70 sagen:
if (linksoben.getX() == 0)
{
timer.cancel();
}
Leider funktioniert das nicht.
Die Zeile 69 habe ich nur gemacht, um die Rechtecke erstmal nicht zu bewegen.
Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class MyFrame extends JFrame{
private JPanel linksoben = new JPanel();
private JPanel linksunten = new JPanel();
private JPanel rechtsoben = new JPanel();
private JPanel rechtsunten = new JPanel();
// private static TimerTask();
TimerTask moveAway = new TimerTask() {
@Override
public void run() {
linksoben.setLocation(linksoben.getX() - 10, linksoben.getY() - 10);
linksunten.setLocation(linksunten.getX() - 10, linksunten.getY() + 10);
rechtsoben.setLocation(rechtsoben.getX() + 10, rechtsoben.getY() - 10);
rechtsunten.setLocation(rechtsunten.getX() + 10, rechtsunten.getY() + 10);
}
};
public MyFrame() {
super("Aufgabe 25");
this.setSize(550,600);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setVisible(true);
setLayout(null);
//left top
linksoben.setSize(50,50);
linksoben.setLocation(200, 140);
linksoben.setBackground(Color.RED);
this.add(linksoben);
//left bottom
linksunten.setSize(50,50);
linksunten.setLocation(200, 200);
linksunten.setBackground(Color.BLACK);
this.add(linksunten);
//right top
rechtsoben.setSize(50,50);
rechtsoben.setLocation(270, 140);
rechtsoben.setBackground(Color.YELLOW);
this.add(rechtsoben);
//right bottom
rechtsunten.setSize(50,50);
rechtsunten.setLocation(270,200);
rechtsunten.setBackground(Color.GREEN);
this.add(rechtsunten);
}
public void startTask() {
Timer timer = new Timer();
// bindet TimerTask moveAway an timer. 0 ist Verzögerung bis erste Ausführung,
// 250 ist das Intervall in ms zwischen den Wiederholungen.
timer.scheduleAtFixedRate(this.moveAway, 0, 250);
timer.cancel();
}
public static void main(String[] args) {
MyFrame fenster = new MyFrame();
fenster.startTask();
}
}
Meine Idee wäre es, in Zeile 70 sagen:
if (linksoben.getX() == 0)
{
timer.cancel();
}
Leider funktioniert das nicht.
Die Zeile 69 habe ich nur gemacht, um die Rechtecke erstmal nicht zu bewegen.