Hallo allerseits,
1)
in dem einfachen Demo-Programm (siehe unten) bewegt sich ein Rechteck immer wieder von links nach rechts.
Wenn das Rechteck das 1.Mal rechts ankommt bewegt es sich wieder von links.
Aber dann befindet sich plötzlich ein kleiner roter Strich auf der linken Seite.
Warum ist das so ? (wenn man das Fenster verändert, z.B. vergrößert geht der rote Strich wieder weg).
2) Bis jetzt dachte ich, dass repaint bewirkt, dass das Bild neu gezeichnet wird.
Wenn das stimmt, warum muß dann in dem Link
http://www.java-forum.org/java-basics-anfaenger-themen/135969-anzeige-erneuern-geht.html
der alte Zeiger der Uhr mit
g.clearRect(0, 0, getWidth(), getHeight());
gelöscht werden.
Die alte Zeichnung ist doch uninteressant, da sowieso neu gezeichnet wird.
mfg
Ernst
1)
in dem einfachen Demo-Programm (siehe unten) bewegt sich ein Rechteck immer wieder von links nach rechts.
Wenn das Rechteck das 1.Mal rechts ankommt bewegt es sich wieder von links.
Aber dann befindet sich plötzlich ein kleiner roter Strich auf der linken Seite.
Warum ist das so ? (wenn man das Fenster verändert, z.B. vergrößert geht der rote Strich wieder weg).
2) Bis jetzt dachte ich, dass repaint bewirkt, dass das Bild neu gezeichnet wird.
Wenn das stimmt, warum muß dann in dem Link
http://www.java-forum.org/java-basics-anfaenger-themen/135969-anzeige-erneuern-geht.html
der alte Zeiger der Uhr mit
g.clearRect(0, 0, getWidth(), getHeight());
gelöscht werden.
Die alte Zeichnung ist doch uninteressant, da sowieso neu gezeichnet wird.
mfg
Ernst
Java:
package demoanimation10;
import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
public class MainDemoAnimation10 {
public static void main(String[] args) {
AnimationView animationView = new AnimationView();
}
}
class TimerActionListener implements ActionListener {
private AnimationJPanel animationJPanel;
public TimerActionListener(AnimationJPanel animationJPanel){
this.animationJPanel=animationJPanel;
}
// Wird nach jedem Feuern des Timers automatisch aufgerufen
public void actionPerformed(ActionEvent ae) {
// Daten updaten
int x;
x=animationJPanel.getX();
if(x <= 400){
x = x + 1;
}
else{
x=0;
}
animationJPanel.setX(x);
// neu zeichnen
animationJPanel.repaint();
}
}
class AnimationView extends javax.swing.JFrame{
public AnimationView() {
// Stelle in MyFenster deklarieren, an die Buttons, Panels, usw.
// montiert werden.
Container mycont;
// Ein Panel (Zeichenfläche), das an mycont montiert wird.
AnimationJPanel animationJPanel;
// Ein Timer zum feuern.
Timer timer;
// Liefert die Stelle, an die montiert wird.
mycont = getContentPane();
// festlegen der Breite und Höhe des Fensters
this.setSize(500,500);
animationJPanel = new AnimationJPanel();
// Montieren des Panels (Zeichenfläche) an mycont
mycont.add(animationJPanel);
// Fensterüberschrift festlegen
setTitle("Meine erste Animation");
// Es wird ein Objekt eines ActionListener (besser. einer Unterklasse),
// d.h. einer Wanze erzeugt.
TimerActionListener tal=new TimerActionListener(animationJPanel);
// Dann wird ein Timer erstellt und das Objekt dieses ActionListeners
// dabei an diesem Timer registriert (angebracht).
// Nach einer gewissen Zeit feuert der Timer immer wieder ein Objekt
// der Klasse ActionEvent ab, das automatisch der entsprechenden
// Methode actionPerformed(...) des ActionListeners übergeben wird.
timer = new Timer(2,tal);
// Dann wird dieser Timer gestartet.
timer.start();
// macht das Fenster sichtbar
this.setVisible(true);
// Programm wird beendet (aus dem Arbeitsspeicher entfernt), wenn
// Fenster weggeklickt wird. Nachprüfen mit Task-Manager
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class AnimationJPanel extends javax.swing.JPanel {
// Daten für Methode paintComponent() ---
private int x;
private int y;
public int getX(){
return x;
}
public void setX(int x){
this.x=x;
}
public int getY(){
return y;
}
public void setY(int y){
this.y=y;
}
public AnimationJPanel() {
x=0;
y=0;
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.red);
g.fillRect(x, y, 30, 25);
}
}