So zeichne ich Linien in einem JPanel und ich möchte es für eine Sekunde pausieren, jedes Mal, wenn es ein zeichnet. Ich habe andere Dinge wie TimeUnit und Timer benutzt, die ich auf dieser Website gefunden habe, aber bis jetzt kann ich es einfach nicht zum Laufen bringen. Ich habe den JFrame eingerichtet und bereit zu gehen und das ist nur das letzte Stück. Ich habe mich auch gefragt, ob die Methode, die funktioniert, auf andere Arten von Formen und Dingen angewendet werden kann, statt nur auf Linien.Wie verzögert man ein Gemälde in Bearbeitung in Java
public class Panel extends JPanel {
Color [] colors = {Color.WHITE, Color.BLUE, Color.RED,Color.YELLOW,Color.CYAN,Color.GREEN, Color.PINK,Color.ORANGE};
Random r = new Random();
int amount;
public Panel(int amount) {
this.amount = amount;
}
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
for (int i = 0; i < amount; i++) {
Timer timer = new Timer(2000, new ActionListener() {
public void actionPerformed(ActionEvent evt) {
g2.setColor(colors[r.nextInt(7)]);
g2.drawLine(r.nextInt(600), r.nextInt(600), r.nextInt(600), r.nextInt(600));
}
});
timer.setRepeats(false);
timer.start();
}
}
}
Die Malmethoden sollten niemals versuchen, eine lange laufende Aufgabe zu implementieren. Es gibt im Grunde genommen zwei gute Möglichkeiten, eine Liste aller Linien zu erstellen, die jedesmal gemalt werden müssen, wenn Farbe aufgerufen wird (das ist am schnellsten für ein paar tausend Zeilen, aber dann langsamer), und das andere ist es, jede Linie zu einem gepufferten Bild zu zeichnen (das ist mehr Arbeit für jede Farbe, bis der Aufwand, jede Linie einzeln zu zeichnen, übertrifft). Welchen Ansatz würden Sie bevorzugen? –
@RakeshKR Bitte hören Sie auf, Swing-Animationen zu geben, bis Sie erklären können, warum dieser Rat falsch ist. –