wulfgang Geschrieben 31. Oktober 2009 Teilen Geschrieben 31. Oktober 2009 Hallo, ich möchte mit folgendem Code erreichen, dass bei einem Mausklick ein Rechteck an der Stelle des Mausklicks gezeichnet wird. Dabei möchte ich paint verwenden und GUI-und Anwendungscode trennen. Mein Problem: Mit getX() und getY() kann ich ja die Koordinaten des Mausklicks abfragen. Nur wie übergebe ich die Koordinaten nach paint??? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class CRechteck4 extends JFrame { Container mcp = getContentPane(); public static void main(String[] arg) { MainFrameCommand reaktion = new MainFrameCommand (); MainFrameGUI gui= new MainFrameGUI(reaktion); } } class MainFrameGUI extends JFrame { public MainFrameGUI(MouseListener cmd) { addMouseListener(cmd); setBackground(Color.white); setSize(800,800); setVisible(true); } public void paint (Graphics g) { g.setColor(Color.black); g.drawRect(30,40,500,700); } } class MainFrameCommand implements MouseListener { public void mouseClicked(MouseEvent e) { int x=e.getX(); int y=e.getY(); } public void mouseEntered(MouseEvent e){}; public void mouseExited(MouseEvent e){}; public void mousePressed(MouseEvent e){}; public void mouseReleased(MouseEvent e){}; } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
JasonDelife Geschrieben 31. Oktober 2009 Teilen Geschrieben 31. Oktober 2009 Ich hätte das mit anonymen Klassen gemacht: // in main nur MainFrameGUI gui= new MainFrameGUI(); class MainFrameGUI extends JFrame { private int x; // x und y als Klassenvariablen private int y; // sind nun allen Methoden zugänglich public MainFrameGUI() { // Nutze die Adapter-Klassen, um Dummy-Methoden zu vermeiden addMouseListener(new MouseAdapter() { public void mouseClicked(MouseEvent e) { x = e.getX(); y = e.getY(); // Kann nun z. B. direkt repaint() aufrufen } }); // ... } public void paint (Graphics g) { // kann auf x und y zugreifen } } Grüße, JasonDelife. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 1. November 2009 Autor Teilen Geschrieben 1. November 2009 Hallo, danke für deine Antwort-mit anonymen Klassen geht es einfacher. Aber in der Aufgabe soll ich GUI und Anwendungslogik trennen und nicht alles in eine Klasse reinpacken. Hat jemand vielleicht noch eine Idee? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 1. November 2009 Teilen Geschrieben 1. November 2009 Am einfachsten, auch um im weiteren Verlauf nur dann ein Dreieck zu zeichnen, wenn ein Mausklick registriert wurde, braucht dein MouseListener eine Referenz auf deinen JFrame. Dann kannst du in der Klasse des JFrames eine Methode anlegen, der die Position des Mauszeigers übergeben wird und dann ein Neuzeichnen des JFrames einleitet und die Position speichert damit diese in der paint()-Methode benutzt werden kann. Dann kannst du, wenn ein Mausklick registriert wird, die Methode im JFrame aus deinem MouseListener aufrufen, übergibst die Position des Mauszeigers und zeichnest dann durch diesen Methodenaufruf den JFrame neu. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 1. November 2009 Autor Teilen Geschrieben 1. November 2009 Am einfachsten, auch um im weiteren Verlauf nur dann ein Dreieck zu zeichnen, wenn ein Mausklick registriert wurde, braucht dein MouseListener eine Referenz auf deinen JFrame. Bins noch mal. Also du meinst in die Klasse MainFrameCommand soll so etwas wie MainFrameGUI test = new MainFrameGUI(); rein? Ich habe ja zwei Klassen, die von JFrame abgeleitet sind. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 1. November 2009 Teilen Geschrieben 1. November 2009 Nein, keine zweite neue Klasse von deinem JFrame, sondern eine Referenz auf deine schon erzeugte Klasse. Am einfachsten machste dass, in dem du deinem MouseListener einen Konstruktor verpasst, dem eine Referenz auf dein JFrame übergeben wird, und dieser dann die Referenz in einer Instanzvariable im MouseListener speichert. Genau dass selbe wie du bei deinem JFrame schon gemacht hast, dass du dort deinen MouseListener übergibst, wobei mir das erst gerade aufgefallen ist, was die Sache dann leider doch nicht so einfach macht. Vielleicht wäre es besser, wenn du den MouseListener an deinen JFrame nicht im Konstruktor des JFrames hinzufügst, sondern direkt in der main-Methode mit gui.addMouseListener(reaktion); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 1. November 2009 Autor Teilen Geschrieben 1. November 2009 Kannst du mir vielleicht ansatzweise den Code geben? Besonders folgendes verstehe ich nicht: Am einfachsten machste dass, in dem du deinem MouseListener einen Konstruktor verpasst, dem eine Referenz auf dein JFrame übergeben wird, und dieser dann die Referenz in einer Instanzvariable im MouseListener speichert Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Dragon8 Geschrieben 3. November 2009 Teilen Geschrieben 3. November 2009 So in der Art meinte ich das, aufpassen, dass ist kein vollständig funktionierende Code: main() { MainFrameGUI gui = new MainFrameGUI(); MainFrameCommand reaktion = new MainFrameCommand(gui); gui.addMouseListener(reaktion); } class MainFrameGUI extends JFrame { private Point mousePosition = new Point(0,0); ... public void setMousePosition(Point pos) { this.mousePosition = pos; } } class MainFrameCommand extends MouseAdapter { private MainFrameGUI parent = null; public MainFrameCommand(MainFrameGUI parent) { this.parent = parent; } public void mouseClicked(MouseEvent e) { this.parent.setMousePosition(new Point(e.getX(), e.getY()); } ... } Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ksg9-sebastian Geschrieben 3. November 2009 Teilen Geschrieben 3. November 2009 Hast du das erste Jahr in der Schule net aufgepasst oder ist der Lehrer Schuld dass du es net verstehst? Ist bestimmt ein ganz fauler Lehrer der einem nix beibringen kann, und die Zeit ist ja eh so knapp, oder? Und "die Aufgabe" will sicher net dass du einfach irgendwie mehrer Klassen machst. Dort geht es wohl eher um sinnvolle Trennung von GUI, Daten und Logik. Und das nennt sich MVC und ergibt sicher 1000000 Treffer bei Google bei denen alle erklärt wird.. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wulfgang Geschrieben 7. November 2009 Autor Teilen Geschrieben 7. November 2009 Hast du das erste Jahr in der Schule net aufgepasst oder ist der Lehrer Schuld dass du es net verstehst? Ist bestimmt ein ganz fauler Lehrer der einem nix beibringen kann, und die Zeit ist ja eh so knapp, oder? Und "die Aufgabe" will sicher net dass du einfach irgendwie mehrer Klassen machst. Dort geht es wohl eher um sinnvolle Trennung von GUI, Daten und Logik. Und das nennt sich MVC und ergibt sicher 1000000 Treffer bei Google bei denen alle erklärt wird.. Was soll dieses Posting und dieser Ton? Es soll Leute geben, die arbeiten und vielleicht tatsächlich noch mehr zu tun haben. Könnte jeder alles bei Google nachschauen, bräuchte es ja keine Foren mehr geben. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
ksg9-sebastian Geschrieben 9. November 2009 Teilen Geschrieben 9. November 2009 Foren sind für allgemeine Diskussionen und spezifische Probleme. Foren sind nicht dazu da um allgemeine Informationen tausendfach zu duplizierern. Zudem gibt es auch hier im Forum viele Themen zum MVC-Pattern. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.