Java Klassen "Graphics" und "MouseEvent" kombinieren

iRecordS

Mitglied
Guten Mittag liebes Forum,

ich sitze an einer Aufgabe, wo das Ziel ist, ein Fenster (bei mir über JFrame) mit einem Kreis in der Mitte zu haben, welcher sich in die entgegengesetzte Position bewegt, wo man hin klickt. Also wenn ich das Programme starte ist der Kreis in der Mitte. Klicke ich dann unten links in das Fenster, dann soll der Kreis oben rechts erscheinen usw.

Bis jetzt habe ich es geschafft, ein Fenster zu erzeugen, welches einen Kreis in der Mitte darstellt (siehe Anhang) und wenn ich mit der Maus auf dem Fenster rumklicke, dann werden die Positionen in der Konsole ausgegeben.

Mein Problem ist jetzt, das ich die X und Y Werte zwar speichern kann und diese auch versuche der Klasse "Grafik" zu übergeben, wo mein Kreis gezeichnet wird, dieser allerdings nicht an der neuen Position gezeichnet wird. Ich denke hier mangelt es mir an Verständnis, wie die Klasse "Graphics" von Java wirklich funktioniert.

Meine Hauptklasse:
Code:
package learnFrame;

import java.awt.BorderLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

import javax.swing.JFrame;

public class Fenster extends JFrame {
    private static final long serialVersionUID = 1L;

    public static void main(String[] args) {
        JFrame test = new JFrame();
        
        test.setTitle("Testing Area");
        test.setBounds(20, 20, 600, 300);
        test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        test.add(new Grafik(), BorderLayout.CENTER);
        test.addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                int x = e.getX();
                int y = e.getY();
                System.out.println("Maus gedrückt an X = " + x + " und Y = " + y);
                test.add(new Grafik(x, y), BorderLayout.CENTER);
            }
        });
        test.setVisible(true);
    }
}

Meine Grafik-Klasse
Code:
package learnFrame;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;

import javax.swing.JComponent;

public class Grafik extends JComponent {
    private static final long serialVersionUID = 1L;   
    private int x;
    private int y;
    
    public Grafik() {
        this.x = 275;
        this.y = 100;
    }
    
    public Grafik(int x, int y) {
        this.x = x;
        this.y = y;
    }
    
    public void paint(Graphics g) {
        Graphics2D graph2 = (Graphics2D)g;
        graph2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        Shape drawCircle = new Ellipse2D.Float(x, y, 50, 50);
        graph2.draw(drawCircle);
    }
}

Bin für jeden Verbesserungs- und Lösungsvorschlag dankbar!

Gruß
iRecordS
 

Anhänge

  • Grafik - Kreis.png
    Grafik - Kreis.png
    32,5 KB · Aufrufe: 4

iRecordS

Mitglied
@MoxxiManager Das sagst du so einfach, allerdings weiß ich nicht wohin genau ^^ Habe Ihn jetzt in den Component verschoben, allerdings wird jetzt gar kein Kreis mehr gezeichnet, egal wie ich es drehe. Das klicken wird trotzdem registriert und in den Konsole ausgegeben.

Code:
package learnFrame;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Ellipse2D;

import javax.swing.JComponent;

public class Grafik extends JComponent {
    private static final long serialVersionUID = 1L;   

    public void paint(Graphics g) {
        Graphics2D graph2 = (Graphics2D)g;
        graph2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
        
        addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                int x = e.getX();
                int y = e.getY();
                System.out.println("Maus gedrückt an X = " + x + " und Y = " + y);
                
                Shape drawCircle = new Ellipse2D.Float(x, y, 50, 50);
                graph2.draw(drawCircle);
            }
        });
    }
}
 

mihe7

Top Contributor
1. überschreibe nicht paint, sondern pantComponent
2. rufe addMouseListener nicht in paint oder paintComponent, sondern im Konstruktor von Grafik (musst Du schreiben) auf.
 

iRecordS

Mitglied
@mihe7 Ich hab deine Ratschläge befolgt allerdings verändert der Kreis seine Position trotzdem nicht. Ich denke das liegt daran, dass ich die paintComponent Methode nicht nochmal aufrufe, wüsste aber auch nicht wie, weil ich nicht weiß, woher ich ein Objekt "g" herbekommen soll.

Code:
public class Grafik extends JComponent {
    private static final long serialVersionUID = 1L;  
    private static int x = 275;
    private static int y = 100;
   
    public Grafik() {
        addMouseListener(new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                x = e.getX();
                y = e.getY();
                System.out.println("Maus gedrückt an X = " + x + " und Y = " + y);
               //paintComponent(g); ???
            }
        });
    }

    public void paintComponent(Graphics g) {
        Graphics2D graph2 = (Graphics2D)g;
        graph2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
               
        Shape drawCircle = new Ellipse2D.Float(x, y, 50, 50);
        graph2.draw(drawCircle);
    }
}
 

MoxxiManagarm

Top Contributor
Das sagst du so einfach, allerdings weiß ich nicht wohin genau ^^
Ich meinte das etwa so:
Java:
public class GraphicLauncher {

    public GraphicLauncher() {
        JFrame frame = new JFrame();

        frame.setTitle("Testing Area");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLayout(new BorderLayout());
        frame.add(new Graphic(), BorderLayout.CENTER);

        frame.pack();
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        new GraphicLauncher();
    }

    private class Graphic extends JComponent {
        private static final int WIDTH = 600;
        private static final int HEIGHT = 300;
        private static final int RADIUS = 25;

        Point clicked;

        protected Graphic() {
            setPreferredSize(new Dimension(WIDTH, HEIGHT));

            clicked = new Point(WIDTH / 2, HEIGHT / 2);

            addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent e) {
                    clicked = e.getPoint();
                    repaint();
                }
            });
        }

        @Override
        public void paintComponent(Graphics g) {
            g.drawOval(clicked.x - RADIUS, clicked.y - RADIUS, RADIUS * 2, RADIUS * 2);
        }
    }
}

Das Beispiel zeichnet den Kreis dorthin, wo geklickt wurde. Du musst nur für deinen Fall noch die entgegensetzte Seite berechnen.
 

mihe7

Top Contributor
weil ich nicht weiß, woher ich ein Objekt "g" herbekommen soll.
Du brauchst kein Graphics-Objekt, da die Methode paint bzw. paintComponent vom Framework aufgerufen wird, wenn ein Neuzeichnen der Komponente notwendig wird. Alles, was Du tun musst, ist das Framework davon zu überzeigen, dass es die Komponente zeichnen soll, das erreichst Du mit repaint();
 

iRecordS

Mitglied
Ich hab jetzt einfach mal das Programm von @MoxxiManagarm genommen und versuch das erstmal zu verstehen. Sind relativ viele Befehle drin die ich nicht kenne. Danach versuche ich das für mich umzusetzen und sollte es etwas geben melde ich mich wieder, bis hier hin, danke für eure große Hilfe!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
TimoN11 Java Klassen Global einbinden Java Basics - Anfänger-Themen 1
G Java Klassen und Instanzmethoden Java Basics - Anfänger-Themen 15
C Java Klassen/Methoden/Übergabeparameter Java Basics - Anfänger-Themen 4
B UML Klassen Diagramm zu Java Code Programmieren und ausführen Java Basics - Anfänger-Themen 21
J Java Interface/abstrakte Klassen Java Basics - Anfänger-Themen 2
T Wie finde ich passende Java Klassen & Methoden? Java Basics - Anfänger-Themen 4
I Klassen Mehrere Java Klassen in einer .java Datei Java Basics - Anfänger-Themen 7
lonelywanderer Erste Schritte Wie wende ich "Klassen" in Java an? Java Basics - Anfänger-Themen 8
C Java Klassen Design? Java Basics - Anfänger-Themen 5
Thallius Klassen aus Classname programmatisch erzeugen. Wie geht das in java? Java Basics - Anfänger-Themen 5
B Klassen Java Taschenrechner mit Klassen und Methoden Java Basics - Anfänger-Themen 12
M xml log4j überschreiben für/in Java Klassen Java Basics - Anfänger-Themen 4
M OOP Java Klassen Microedition vs. Java 2 Standard Edition Java Basics - Anfänger-Themen 5
S Innere Klassen in Java Java Basics - Anfänger-Themen 4
M Wie bilde ich folgende Java Klassen in UML ab Java Basics - Anfänger-Themen 2
J Java-Klassen außerhalb von Eclipse debuggen Java Basics - Anfänger-Themen 7
D Java Klassen Java Basics - Anfänger-Themen 8
K OOP Java import zwei gleichnamiger Klassen Java Basics - Anfänger-Themen 5
M java erkennt import-klassen nicht?! Java Basics - Anfänger-Themen 39
J In JSP Java-Klassen einbinden Java Basics - Anfänger-Themen 3
N Aufrufen von .java Klassen in einem Projekt Java Basics - Anfänger-Themen 2
I [Java] Umgang mit abstrakten Klassen, Interfaceklassen (BSP) Java Basics - Anfänger-Themen 12
M Problem mit dem Klassen aus dem java.io Paket Java Basics - Anfänger-Themen 9
M Aus wieviel Klassen darf in Java eine (Programm)besitzen? Java Basics - Anfänger-Themen 21
G Anzahl der Klassen in Java Java Basics - Anfänger-Themen 7
A von Java-Beans Klassen aufrufen Java Basics - Anfänger-Themen 3
G Frage zum Abspeichern von Java-Klassen Java Basics - Anfänger-Themen 9
G Aufruf von JAVA-Klassen aus XML-Dialekt, Java-Skript o. JSP Java Basics - Anfänger-Themen 3
N Java Klassen kommentieren? Java Basics - Anfänger-Themen 13
G Java Programm das Klassen Implementiert Java Basics - Anfänger-Themen 5
F Java Klassen finden Java Basics - Anfänger-Themen 3
I Java Applet mit Klassen Java Basics - Anfänger-Themen 5
T Java Klassen benennung? Java Basics - Anfänger-Themen 4
L Java applet und andere Klassen unauffindbar? Java Basics - Anfänger-Themen 2
W Java-PRogramm liest als EXE-File Nicht USB, jedoch aus NetBeans Java Basics - Anfänger-Themen 23
W Methoden java map ersatz für c++map Java Basics - Anfänger-Themen 2
M Erste Schritte Java Primzahltester Java Basics - Anfänger-Themen 4
A csv Reader für Java? Java Basics - Anfänger-Themen 27
K Java - Enums Java Basics - Anfänger-Themen 30
tomzen Java Unterstützung für exel dateien installieren. Java Basics - Anfänger-Themen 2
Rookar java.lang.NoClassDefFoundError: org/json/JSONException Java Basics - Anfänger-Themen 2
Rookar Mit Button andere java öffnen Java Basics - Anfänger-Themen 4
F Java Object to Hashmap ? Java Basics - Anfänger-Themen 6
I Backend in Java und Ansicht von Dateien in statische HTML Seiten? Java Basics - Anfänger-Themen 15
R Input/Output Verwendung des Euro-Zeichens in Java Java Basics - Anfänger-Themen 7
I Push Nachrichten von JAVA EE App an Mobile App Java Basics - Anfänger-Themen 3
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben