Hallo Zusammen hier im Forum, ich habe folgendes Problem und komme einfach nicht weiter.
Daher würde ich gerne mein Problem hier im Forum schildern mit der Hoffnung auf Hilfe:
Ich möchte ein Graphics2D Objekt mit der Maus erstellen, aber irgendwie komme ich an eine Punkt wo ich mit den Objekten nicht mehr klar komme:
Da es ein größeres Programm werden soll habe ich verschiedene Dateien erstellt:
Main_Class: (hier wird das Mouse_Gui Objekt erstellt.
Mouse_Gui:
Rechteck:
Mouse_Handler:
Wenn ich die Mouse_Gui static mache habe ich es hinbekommen, dass mein Viereck an der Stelle wo die Maus ist immer neu gezeichnet wird. Nun möchte ich aber dass weitere Vierecke entstehen und das alte bleibt.
Nur stehe ich da irgendwie auf dem Schlauch.
Ich denke mir dass ich im mouseClicked Event ein neues Objekt vom Typ Rechteck erstellen muss.
Das habe ich mit: new Rechteck(x,y); erledigt.
Aber die repaint Merhode wird danach gar nicht angesprungen.
Muss ich noch eine Datenstruktur (evtl. Arraylist<Rechteck>) anlegen wo die entstehenden Rechtecke abgelegt werden ?
Da new Rechteck(x,y); ja ohne Variablenname erstellt wird.
Ich habe auch schon probiert das frame static zu machen und dann im mouseClicked Event mit
Mouse_Gui.frame.add(new Rechteck(x,y));
Eine neues Viereck zu erstellen... aber das war auch eine Sackgasse.
Vielen Dank schon mal an Alle die sich damit beschäftigen.
Ich bin für jeden Hinweis oder Ratschlag dankbar.
Daher würde ich gerne mein Problem hier im Forum schildern mit der Hoffnung auf Hilfe:
Ich möchte ein Graphics2D Objekt mit der Maus erstellen, aber irgendwie komme ich an eine Punkt wo ich mit den Objekten nicht mehr klar komme:
Da es ein größeres Programm werden soll habe ich verschiedene Dateien erstellt:
Main_Class: (hier wird das Mouse_Gui Objekt erstellt.
Java:
package Mouse_Click_2;
public class Main_Class {
public static void main(String[] args) {
// TODO Automatisch generierter Methodenstub
Mouse_Gui MG = new Mouse_Gui();
}
}
Mouse_Gui:
Java:
package Mouse_Click_2;
import javax.swing.JFrame;
public class Mouse_Gui {
JFrame frame;
//static Rechteck rect = new Rechteck();
Mouse_Gui(){
System.out.println("Maus GUI Konstruktor");
frame = new JFrame("Mouse Gui");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 500);
frame.setVisible(true);
Rechteck rect = new Rechteck();
frame.add(rect);
Mouse_Handler handler = new Mouse_Handler();
frame.addMouseListener(handler);
frame.addMouseMotionListener(handler);
}
}
Rechteck:
Java:
package Mouse_Click_2;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.geom.Rectangle2D;
import javax.swing.JPanel;
public class Rechteck extends JPanel {
int x, y;
public Rechteck() {
System.out.println("Rechteck Konstruktor ohne Parameter");
x = 1;
y = 1;
}
public Rechteck(int x, int y) {
setPreferredSize(new Dimension(500, 500));
System.out.println("Rechteck Konstruktor X:"+x+"Y:"+y);
repaint();
}
protected void paintComponent(Graphics g) {
super.paintComponent( g );
System.out.println("paintcomponent Methode");
Graphics2D Gragik_2D = (Graphics2D) g;
Gragik_2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Rectangle2D rectangle1 = new Rectangle2D.Double(x, y, 30, 30);
Gragik_2D.draw(rectangle1);
}
public void draw(int x, int y) {
System.out.println("Draw Methode" +x+y);
this.x = x;
this.y = y;
repaint();
}
}
Mouse_Handler:
Java:
package Mouse_Click_2;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
public class Mouse_Handler implements MouseListener, MouseMotionListener {
int x;
int y;
@Override
public void mouseDragged(MouseEvent e) {
System.out.println("dragged");
}
@Override
public void mouseMoved(MouseEvent e) {
System.out.println("moved");
}
@Override
public void mouseClicked(MouseEvent e) {
System.out.println("clicked");
x = e.getX() - 20;
y = e.getY() - 30;
Rechteck rect2 = new Rechteck(x,y);
}
@Override
public void mouseEntered(MouseEvent e) {
System.out.println("entered");
}
@Override
public void mouseExited(MouseEvent e) {
System.out.println("exited");
}
@Override
public void mousePressed(MouseEvent e) {
System.out.println("pressed");
}
@Override
public void mouseReleased(MouseEvent e) {
System.out.println("released");
}
}
Wenn ich die Mouse_Gui static mache habe ich es hinbekommen, dass mein Viereck an der Stelle wo die Maus ist immer neu gezeichnet wird. Nun möchte ich aber dass weitere Vierecke entstehen und das alte bleibt.
Nur stehe ich da irgendwie auf dem Schlauch.
Ich denke mir dass ich im mouseClicked Event ein neues Objekt vom Typ Rechteck erstellen muss.
Das habe ich mit: new Rechteck(x,y); erledigt.
Aber die repaint Merhode wird danach gar nicht angesprungen.
Muss ich noch eine Datenstruktur (evtl. Arraylist<Rechteck>) anlegen wo die entstehenden Rechtecke abgelegt werden ?
Da new Rechteck(x,y); ja ohne Variablenname erstellt wird.
Ich habe auch schon probiert das frame static zu machen und dann im mouseClicked Event mit
Mouse_Gui.frame.add(new Rechteck(x,y));
Eine neues Viereck zu erstellen... aber das war auch eine Sackgasse.
Vielen Dank schon mal an Alle die sich damit beschäftigen.
Ich bin für jeden Hinweis oder Ratschlag dankbar.