GUI Kreis zeichnen

scsv2504

Mitglied
Hallo, hänge an folgender Aufgabe:
"Es soll ein JFrame geschrieben werden, der über MouseAdapter bei MousePressed den aktuellen Punkt der Maus als Mittelpunkt speichert und bei MouseDragged einen Kreis zeichnet mit dem Abstand zwischen Mittelpunkt und Maus als Radius"

Code:
public class kreiszeichnen extends JPanel{
    Point mittelPunkt = new Point();
    int radius=0;
   
    public class MeinMouseListener extends MouseAdapter{
        public void mousePressed(MouseEvent e) {
            mittelPunkt=e.getPoint();
           
        }
        public void mouseDragged(MouseEvent e) {
            radius=mittelPunkt.x-e.getX();
repaint();
           
        }       
    }
   
    public kreiszeichnen() {
        MeinMouseListener listener= new MeinMouseListener();
        addMouseListener(listener);
        addMouseMotionListener(listener);
    }
    public void paint(Graphics g) {
        g.fillOval(mittelPunkt.x, mittelPunkt.y, radius, radius);
    }
public static void main(String[] args) {
    JFrame mf=new JFrame();
    mf.setSize(250, 150);
    mf.setVisible(true);
    mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JComponent n=new kreiszeichnen();
    mf.setContentPane(n);
    n.setOpaque(false);
}
}

Kann mir jemand weiterhelfen? Wenn ich das Programm zum Laufen bringe, passiert nichts...
 

Robat

Top Contributor
Ein paar Hinweise:
- berechne den absoluten Wert zwischen Mittelpunkt und aktueller Mauskoordinate (negative Radien gibt es noch nicht :p )
- setVisible(true) erst zum Schluss aufrufen
- benutz paintComponent(Graphics) anstatt paint(Graphics)
 

scsv2504

Mitglied
Bei mir wird ein Fenster angezeigt.
Bei mir auch, ich meine der Kreis wird nicht gezeichnet.

Ein paar Hinweise:
- berechne den absoluten Wert zwischen Mittelpunkt und aktueller Mauskoordinate (negative Radien gibt es noch nicht :p )
- setVisible(true) erst zum Schluss aufrufen
- benutz paintComponent(Graphics) anstatt paint(Graphics)

paint(Graphics) ist von der Aufgabe her vorgegeben...
Vielen Dank für den Tipp mit dem Radius, jetzt hat es geklappt!

/edit: eine Frage hätte ich dennoch, jetzt ist das ganze aber nicht der Mittelpunkt wenn ich den Kreis zeichne. Wie würde man das hinkriegen?
 

scsv2504

Mitglied
Wenn radius tatsächlich den Radius meint, müsste es richtig heißen
Code:
g.fillOval(mittelPunkt.x-radius, mittelPunkt.y-radius, radius*2, radius*2);
zum Verständnis, fillOval's breite mal höhe ist als Durchmesser jeweils anzusehen, richtig? Dann macht dein Code auch völlig Sinn. Vielen Dank an alle
 

mihe7

Top Contributor
zum Verständnis, fillOval's breite mal höhe ist als Durchmesser jeweils anzusehen, richtig?
Ja, wie bereits geschrieben: Du gibst das Rechteck an, in das das Oval gezeichnet werden soll.

Mal im Zusammenhang:
Java:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Test {

    private static class KreisPanel extends JPanel {
        private Point mittelpunkt = new Point();
        private int radius=0;

        public void setMittelpunkt(Point p) {
            mittelpunkt = p;
        }

        public void setRandpunkt(Point p) {            
            int dx = mittelpunkt.x - p.x;
            int dy = mittelpunkt.y - p.y;
            setRadius((int)(Math.sqrt(dx*dx + dy*dy)));
        }

        public void setRadius(int radius) {
            this.radius = radius;
            repaint();
        }

        @Override
        public void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.fillOval(mittelpunkt.x - radius, mittelpunkt.y - radius, 
                       radius*2, radius*2);
        }
    }
 
    public class Kreiszeichner extends MouseAdapter {
        @Override
        public void mousePressed(MouseEvent e) {
            KreisPanel panel = (KreisPanel) e.getComponent();
            panel.setMittelpunkt(e.getPoint());
        }

        @Override
        public void mouseDragged(MouseEvent e) {
            KreisPanel panel = (KreisPanel) e.getComponent();
            panel.setRandpunkt(e.getPoint());
        }      
    }
   
    public void createAndShowGUI() {
        KreisPanel panel = new KreisPanel();
        Kreiszeichner listener= new Kreiszeichner();
        panel.addMouseListener(listener);
        panel.addMouseMotionListener(listener);

        JFrame mf=new JFrame();
        mf.add(panel);
        mf.setSize(250, 150);
        mf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        mf.setVisible(true);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Test().createAndShowGUI());
    }
}
 

scratchy1

Bekanntes Mitglied
Hallo Leute,
ich habe ein ähnliches Problem,
ich will ein (EggTimer)-Canvas der Größe 320x320 bauen und darin
einen Kreis mit 300 Pixel Durchmesser setzen:
Die Methode paint (Graphics g) ist auch vorgegeben

Code:
public void paint(Graphics g) {

g.drawOval(10, 10, 299, 299);
Ich habe das wie folgt angesetzt:
width und height sind 300 Pixel da in der Doku steht
"The oval covers an area that is width + 1 pixels wide and height + 1 pixels tall ", habe ich 299 genommen.
Jetzt muss ich noch rausfinden, was x und y sind:

x=320/2-radius
y=320/2-radius

Der Radius ist 150, also sind
x=160-150=10
y=160-150=10 ?

Ist mein Ansatz richtig?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
W JavaFX Ich kann keinen Kreis richtig zeichnen AWT, Swing, JavaFX & SWT 8
T Swing / Kreis zeichnen AWT, Swing, JavaFX & SWT 2
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
T 2D-Grafik Kreis "von Hand" zeichnen -> jedesmal repaint()? AWT, Swing, JavaFX & SWT 6
G Kreis zeichnen und mit Maus ziehen AWT, Swing, JavaFX & SWT 3
L 2D-Grafik Linie von Kreis zu Kreis AWT, Swing, JavaFX & SWT 3
S Kreis vergrößern/verkleinern mit Buttons AWT, Swing, JavaFX & SWT 1
M JavaFX Bild zur ImageView in einem Kreis anzeigen. AWT, Swing, JavaFX & SWT 4
L 2D-Grafik Dreieck in einem Kreis??? AWT, Swing, JavaFX & SWT 1
D Swing Manuellen Kreis zeichen AWT, Swing, JavaFX & SWT 22
T Kreis in Jlabel darstellen. AWT, Swing, JavaFX & SWT 13
J Grafik (Kreis) schneller bewegen? AWT, Swing, JavaFX & SWT 6
E Kreis-Mal-Programm AWT, Swing, JavaFX & SWT 7
S Kreis in Kreis AWT, Swing, JavaFX & SWT 5
P Elemente im Kreis aufstellen AWT, Swing, JavaFX & SWT 5
M 2D-Grafik "Unvollständiger" Kreis(kontur) AWT, Swing, JavaFX & SWT 8
T Einen Kreis anzeigen AWT, Swing, JavaFX & SWT 14
B 2D-Grafik Text in einem Kreis zentrieren AWT, Swing, JavaFX & SWT 3
Semox 2D-Grafik Radialer Verlauf in einem Kreis AWT, Swing, JavaFX & SWT 4
P Swing FocusTraversalPolicy dreht sich im Kreis AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
Semox Swing Kreis löschen durch Mausklick in der Nähe AWT, Swing, JavaFX & SWT 2
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
K Wenn Mauszeiger in der Nähe vom Kreis, soll Kreis an eine andere Stelle springen AWT, Swing, JavaFX & SWT 8
Spin Hilfe - Erklärungsbedarf für Kreis AWT, Swing, JavaFX & SWT 5
H Punkte im Kreis AWT, Swing, JavaFX & SWT 3
G kreis malen -> welche funktion? AWT, Swing, JavaFX & SWT 3
G Farbe ändern bei Klick auf einen Kreis AWT, Swing, JavaFX & SWT 5
M Kreis mit gedrückter Maus bewegen AWT, Swing, JavaFX & SWT 20
U Farbe von Kreis AWT, Swing, JavaFX & SWT 3
S Kreis als JFrame AWT, Swing, JavaFX & SWT 9
TheJavaKid Kreis, Rechteck, Linie. verschieben AWT, Swing, JavaFX & SWT 5
T Kreis ActionListener AWT, Swing, JavaFX & SWT 5
M Mandelbrot mit BigDecimal erstellen und in der UI zeichnen, funktionierte nicht. AWT, Swing, JavaFX & SWT 1
H JavaFX Canvas neu zeichnen anstoßen AWT, Swing, JavaFX & SWT 34
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
N JavaFX Unicode zeichnen in javafx Label verwenden AWT, Swing, JavaFX & SWT 2
G 2D-Grafik Grafik in zwei verschiedenen Fenstern gleichzeitig zeichnen AWT, Swing, JavaFX & SWT 9
S Event Handling Neu zeichnen nur wenn Berechnung fertig ist AWT, Swing, JavaFX & SWT 4
CptK Funktionsgraphen effizient zeichnen und nur Teile von JPanel erneuern AWT, Swing, JavaFX & SWT 2
G Dreieck aus Pixeln zeichnen AWT, Swing, JavaFX & SWT 8
N Mit KeyListener ein rechteck zeichnen AWT, Swing, JavaFX & SWT 9
B 2D-Grafik paintcomponent Probleme beim zeichnen AWT, Swing, JavaFX & SWT 10
Z Swing Graph zeichnen lassen AWT, Swing, JavaFX & SWT 16
O Kann kei neues Panel zum zeichnen aufrufen... AWT, Swing, JavaFX & SWT 4
L Swing zeichnen AWT, Swing, JavaFX & SWT 14
S GUI Kreuz zeichnen und Position ausgeben AWT, Swing, JavaFX & SWT 3
S Swing Rechteck über JTable zeichnen (per MouseListener) AWT, Swing, JavaFX & SWT 1
L Swing Ein Rechteck in ein Grid Zeichnen AWT, Swing, JavaFX & SWT 5
L JavaFX Animation, erst zeichnen dann anzeigen AWT, Swing, JavaFX & SWT 4
K Mehrere Linien zeichnen AWT, Swing, JavaFX & SWT 8
E Transparent zeichnen AWT, Swing, JavaFX & SWT 2
S AWT Probleme beim Zeichnen AWT, Swing, JavaFX & SWT 3
T Tic Tac Toe - GUI Linien zeichnen AWT, Swing, JavaFX & SWT 14
C Applet Zeichnen über Button-Click AWT, Swing, JavaFX & SWT 13
Soloeco Graph zeichnen AWT, Swing, JavaFX & SWT 1
G Zeichnen Programm AWT, Swing, JavaFX & SWT 1
I Graph mit Swing zeichnen AWT, Swing, JavaFX & SWT 8
H Swing + Paint: Mehrere Objekte zeichnen lassen AWT, Swing, JavaFX & SWT 3
W Swing JPanel nur einmal nach mehreren Änderungen neu zeichnen AWT, Swing, JavaFX & SWT 1
D Quadrat, Rechteck zeichnen AWT, Swing, JavaFX & SWT 3
K Probleme beim zeichnen mit paintComponent() AWT, Swing, JavaFX & SWT 1
JG12111989 mehrere Polyline-Objekte zeichnen AWT, Swing, JavaFX & SWT 3
A Swing JRadioButton zeichnen nicht AWT, Swing, JavaFX & SWT 4
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
P 2D-Grafik Bogen(Arc) zwischen zwei Punkten zeichnen AWT, Swing, JavaFX & SWT 2
F Java Swing Rechteck in JPanel zeichnen AWT, Swing, JavaFX & SWT 7
KilledByCheese Swing 2D JLabel Array Maze zeichnen AWT, Swing, JavaFX & SWT 2
S Parallele Linien zeichnen AWT, Swing, JavaFX & SWT 5
J Linien auf JPanel zeichnen AWT, Swing, JavaFX & SWT 3
P AWT Canvas freihändig zeichnen AWT, Swing, JavaFX & SWT 1
llabusch Linien in JPanel zeichnen AWT, Swing, JavaFX & SWT 6
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
I Applet BlueJ Applet - Bild mit if-Schleife zeichnen lassen AWT, Swing, JavaFX & SWT 16
L JavaFX JavafX Timelime zeichnen und schön stylen? AWT, Swing, JavaFX & SWT 2
I JFrame neu zeichnen, nicht überzeichnen! AWT, Swing, JavaFX & SWT 2
I Spielsteine zeichnen und entfernen AWT, Swing, JavaFX & SWT 3
H JavaFX Freezes beim Zeichnen mit Canvas AWT, Swing, JavaFX & SWT 3
H Swing BufferedImage zeichnen AWT, Swing, JavaFX & SWT 1
M JFreeChart neu zeichnen sich Wenn Jtable sich ändert AWT, Swing, JavaFX & SWT 5
S 2D-Grafik MouseDragged Linien zeichnen AWT, Swing, JavaFX & SWT 4
M Zeichnen ohne vorherige Linien zu löschen AWT, Swing, JavaFX & SWT 2
T Problem beim Zeichnen von Rechteck AWT, Swing, JavaFX & SWT 3
I Text zur Linie zeichnen AWT, Swing, JavaFX & SWT 1
I Pfeil zeichnen am Ende einer Linie AWT, Swing, JavaFX & SWT 1
D 2D-Grafik Inhalt eines Graphics in anderes Graphics zeichnen.... AWT, Swing, JavaFX & SWT 3
F Zeichnen des Button AWT, Swing, JavaFX & SWT 4
B Zeichnen mit paintComponent? Oder anders? AWT, Swing, JavaFX & SWT 15
C Swing Aus verschiedenen Klassen zeichnen. AWT, Swing, JavaFX & SWT 2
C Swing BufferedImage zeichnen und JLabels setzen. AWT, Swing, JavaFX & SWT 17
M Kein Zeichnen der Figuren auf JPanel AWT, Swing, JavaFX & SWT 4
J JButton neu zeichnen lassen AWT, Swing, JavaFX & SWT 9
S Quadrat auf Frame zeichnen AWT, Swing, JavaFX & SWT 2
P Image oder Icon auf Tooltip zeichnen AWT, Swing, JavaFX & SWT 4
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
X Swing JPanel mehrere Ebenen zeichnen AWT, Swing, JavaFX & SWT 13
G Zeichnen auf eine schwergewichtige Komponente? AWT, Swing, JavaFX & SWT 0
P SWT Nebula Gallery - Bildbereiche zeichnen AWT, Swing, JavaFX & SWT 3
A Swing Paint mit Button Clear den Hintergrund säubern um wieder zeichnen zu können AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben