Ziehen und verschieben Sie einen Kreis in Java

Ich bin mit Swing zu erstellen, eine kleine GUI in Java. Alles, was ich bin versucht zu bekommen, es zu tun ist, nehmen Sie eine ArrayListvon Circles und zeichnen Sie diese. Ich habe laufen in zwei Probleme:

1) ich rufe meine draw Methode wiederholt, bevor es zieht den Kreis. Wenn ich nur rufe meine draw Methode einmal nichts passiert, bekomme ich eine leere Zeichnung. Wenn ich es nennen-in einer Schleife, die ausgeführt wird, für weniger als 30 Millisekunden, es zeichnet nur die erste von zwei Kreisen, die ich zeichnen will. Schließlich, wenn ich es nennen-für mehr als 30 Millisekunden zieht es die beiden Kreise, die ich versuche zu zeichnen.

und

2) Wenn ich mich bewege einen der Kreise, bekomme ich ein "flimmern" auf der Zeichnung.

Ich bin nicht allzu vertraut mit Swing-Programmierung. Ich habe gesucht mit sample-code und beobachtete ein paar videos - und was ich habe, sieht mir Recht sein. Aber ich denke, ich muss etwas Durcheinander, weil es nicht so aussieht, wie das in den videos die ich geschaut habe.

Hier ist mein GUI Klasse:

package gui;

import draw.*;
import java.util.List;
import javax.swing.*;

public class GUI extends JFrame {
    private CirclePainter drawingBoard = new CirclePainter();

    public GUI()
    {
        setSize(500, 500);
        this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.add(drawingBoard);
        drawingBoard.setVisible(true);
    }

    public void draw(List<Circle> circles)
    {
        drawingBoard.paintComponent(drawingBoard.getGraphics(), circles);
    }
}

meine CirclePainter Klasse

package gui;

import draw.Circle;

import javax.swing.*;
import java.awt.*;
import java.util.List;

class CirclePainter extends JPanel
{
    public void paintComponent(Graphics graphics, List<Circle> circles)
    {
        super.paintComponent(graphics);
        for(Circle circle : circles)
            graphics.fillOval(circle.getX(), circle.getY(), circle.getRadius() * 2, circle.getRadius() * 2);
    }
}

EDIT: redacted etwas code, da das für ein Schulprojekt. Der restliche code sollte genug sein für jemanden, der zu Besuch in der Zukunft immer noch die Frage verstehen.

InformationsquelleAutor ThomYorkkke | 2014-11-21
Schreibe einen Kommentar