Zum Inhalt springen

Wertübergabe


wulfgang

Empfohlene Beiträge

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){};

	}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

Link zu diesem Kommentar
Auf anderen Seiten teilen

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
Link zu diesem Kommentar
Auf anderen Seiten teilen

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());

	}

	...

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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..

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...