Warum wird mein java.awt.Window nicht neu gezeichnet, nachdem ich die repaint() Methode aufgerufen habe?Wie ein java.awt.Window neu zu streichen?
public class Counter extends Window implements ActionListener {
private static final long serialVersionUID = 1L;
private Timer timer;
private int time;
public Counter() {
super(null);
setAlwaysOnTop(true);
setBounds(getGraphicsConfiguration().getBounds());
setBackground(new Color(0, true));
setVisible(true);
timer = new Timer(1000, this);
timer.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
g.clearRect(0, 0, getWidth(), getHeight());
g.setColor(Color.RED);
g.drawString(String.valueOf(time), getWidth()/2, getHeight()/2);
}
@Override
public void update(Graphics g) {
super.update(g);
}
@Override
public void actionPerformed(ActionEvent e) {
time++;
repaint();
}
Wie Sie sehen können, habe ich einen Timer mit einer Verzögerung von 1 Sekunde erstellt. Danach rufe ich repaint() auf, um die Nummer des Counters auf dem Bildschirm zu zeichnen. Aber es zeichnet nur eine Null auf meinem Bildschirm und hört dann auf zu zeichnen (die Null bleibt auf dem Bildschirm). Zuerst dachte ich, dass die Paint-Methode nur einmal aufgerufen wird, aber ich habe eine System.out.prinln() getestet und probiert, dass die Paint-Methode jede Sekunde ausgeführt wird, so dass sie das Fenster neu streichen sollte ... Also ich weiß nicht wo Ich machte einen Fehler.
Und ja, es ist meine Absicht, die awt.Window und keine JFrame zu verwenden oder Rahmen etc ..
Sind Sie sicher, Ihre actionperformed Methode wird aufgerufen? In Ihrer println() Innenfarbe drucken Sie Ihre Zeit Variable, um sicherzustellen, dass es überhaupt aktualisiert wird –
@GordonAllocman yep Sir, actionperformed heißt, ich habe es getestet, Zeit zählt auch 0,1,2,3 .... – AvarionDE
Rufen Sie explizit die Methode "Invalidate" für diese Komponente auf. Dies erzwingt ein Repaint, da das gesamte Containertool ungültig wird (und Komponenten neu darin angeordnet werden müssen). – Jorge