Methode mouseClicked() aufrufen

Status
Nicht offen für weitere Antworten.
I

Inventar

Gast
Hallo,

ich möchte gerne die Methode mouseClicked() aufrufen, wenn eine Bedingung erfüllt ist innerhalb einer Methode. Nur, wie kriege ich das realisiert? mouseClicked realisiert in einer eigenen Methode funktioniert so weit einwandfrei.

Code:
public void run()
     while (up){
          if (Bedingung == true){
             public void mouseClicked(mouseEvent e){
                  ..................
            }
         }
      }
}
 

wayne

Bekanntes Mitglied
ich glaube, der grund, warum bisher niemand auf deine post geantwortet hat, ist der, daß keiner blickt, was du wissen willst. vielleicht erklärst du es etwas ausführlicher. der code, den du hier reingepostet hast, ist ja weder lauffähig noch sinnvoll, denn die methode mouseClicked(...) ist ja bekanntlich bestandteil eines MouseListeners. und letzterer ist in deinem code nicht enthalten. davon abgesehen, wenn du die methode mouseClicked(...) in deiner schleife aufrufen willst, warum machst du's denn dann nicht einfach. in dieser klasse brauchst du dafür nichts weiter als eine referenz auf den MouseListener von dem du die methode aufrufen willst und schon funktioniert das. oder gehts dir darum, daß du net weißt, wie du dafür ein MouseEvent generieren sollst? dann wär's aber ziehmlich hilfreich für uns, wenn wir wüsten, in welchem zusammenhang du das brauchst, weil an sich kannst du ja auch mouseClicked(null) aufrufen, wenn du das MouseEvent nicht verarbeitest.

beste grüße

wayne
 
G

Guest

Gast
Hi,

die Informationen sind wirklich was dürftig, so habe ich die entsprechende klasse mal neu generiert, um die Problematik aufzuzeigen.
Das Progreamm bricht ab mit:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
	at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)

Ich denke mal, weil zu viele MouseListener registriert werden. Das liegt wohl an der while-Schleife des Threads. Nur brauche ich dort diesen Thread, wie auch mouseClicked() in diesem Thread.. Mir will keine elegantere Lösung einfallen, wie ich das hinkriegen soll.. Hier die Klasse...
Code:
public class TestMouseClass implements MouseMotionListener,
		MouseListener, Runnable {

	private ArrayList<Integer> testMouseArray = new ArrayList<Integer>();
	private Rectangle2D geo1, geo2;

	
	
	public Shape[] testGeo = {
			geo1 = new Rectangle2D.Double(10,10,10,10),
			geo2 = new Rectangle2D.Double(60,60,50,50),
			};

	public TestMouseClass(){
		
		//erste Initialisierung der ArrayList(), was defintiv sein muss
		for (int i = 0; i < testGeo.length; i++) {
			testMouseArray.add(new Integer(7));
			addMouseListener(this);
		}
		repaint();
	}

	
	public void paint(Graphics g) {
		Graphics2D g2D = (Graphics2D) g;
		for (int i = 0; i < 2; i++) {
			g2D.setColor(Color.BLACK);
			g2D.fill(testGeo[i]);
		}
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		paint(g);
	}

	
	
	public void run(){
		Object andereKlasse;
		while(andereKlasse.applicationIsUp == true){
			if (andereKlasse.status == 1){
				
				//hier will ich ein Rechteck erst klicken können, wenn eine Vorrausetzung erfuellt ist
				//es wird aber wieder ein MouseListener regestriert
				addMouseListener(new MouseAdapter(){
					public void mouseClicked(MouseEvent e) {
						int x = e.getX();
						int y = e.getY();
						int variablePflicht = 0;
						for (int i = 0; i < 2; i++) {
							if (testGeo[i].contains(x, y)) {
								variablePflicht = i;
								wiederAndereKlasse.ausfuehren(variablePflicht);
							}
						}
					    
						repaint();
					}
				});
			}
		}
	}


	public void mouseDragged(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	public void mouseMoved(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	public void mouseClicked(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	public void mouseEntered(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	public void mouseExited(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	public void mousePressed(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}


	public void mouseReleased(MouseEvent e) {
		// TODO Auto-generated method stub
		
	}
}
 
S

SlaterB

Gast
du hast eine for-Schleife am Anfang und dann noch die while-Schleife mit unnötigen MouseListenener,
muss alles weg, 2 insgesamt dürften maximal reichen,

falls du genauere Tipps haben willst, dann erkläe genauer, was das Problem ist,
und welche Strategie du bisher mit den vielen Listenern verfolgst
 
G

Gast

Gast
Hi,

das habe ich ja in meinem Posting versucht. Aber gut.. Vorneweg, der MouseListener in der for - Schleife ist auch schon weg gelassen worden, aber nichtsdestotrotz hängt sich das Programm auf, was wohl an der Registrierung der MouseListener in der while - Schliefe hängt. Also wäre die Registrierung in der for - Schleife die elegantere Lsg. Nun muss ich aber auf MouseClicks in der while - Schleife reagieren können. Für mich gibt es da erstmal nur die Lsg die MouseListener neu zu registrieren.
 
G

Gast

Gast
Aber es funktioniert so nicht. Deswegen erfrage ich eine alternative Lsg.
 

wayne

Bekanntes Mitglied
was du mit diesem code tust ist, solange applicationIsUp == true und der status==1 immer wieder neue MouseListener einzutragen. diese reagieren auf ein mouseClicked, egal ob der status==1 oder applicationIsUp==true. ich vermute aber, das du den code in der mouseClicked nur dann ausführen willst, wenn die bedingungen zuschlagen und zwar nur ein einziges mal.

das würde dann so funktionieren, daß du erstens mal das erben von Runnable rausschmeißt, denn das brauchst du nicht. und den code aus der mouseClicked in der aktuellen methode run() schreibst du in den konstruktor deiner klasse, wie folgt:
Code:
addMouseListener(new MouseAdapter(){ 
               public void mouseClicked(MouseEvent e) { 
                  if( andereKlasse.applicationIsUp() && andereKlasse.getStatus() == 1 ){
                      int x = e.getX(); 
                      int y = e.getY(); 
                      int variablePflicht = 0; 
                      for (int i = 0; i < 2; i++) { 
                         if (testGeo[i].contains(x, y)) { 
                            variablePflicht = i; 
                            wiederAndereKlasse.ausfuehren(variablePflicht); 
                         } 
                      }                    
                      repaint(); 
                  }
               } 
            });
des weiteren würde ich mir mal deinen konstruktor nochmal ansehen. aktuell fügst du pro rechteck einen MouseListener hinzu und zwar immer den selben nämlich this. das ist, gelinde gesagt, schwachsinn. füge this ein einziges mal hinzu. dafür schreibst du die mouseClicked(...) oder mousePressed(...) oder welche auch immer um, dahingehen, daß du per aMouseEvent.getPosition() bzw. getX() oder getY() und aShape.contains(...) (also eine for-schleife über dein testGeo-machen und immer schon von jedem element vergleichen ob contains(...) == true und falls ja dann was auch immer ausführen und anschließend break, die for-schleife verlassen.

viel erfolg

wayne
 

wayne

Bekanntes Mitglied
sorry, mir ging vorhin die zeit aus. was ich im unteren absatz meine ist, daß du im prinzip das in der mousePressed(...) oder mouseClicked(...) machen solltest, was du bereits in deinem MouseAdapter tust. aber genau aus diesem grund stellt sich für mich die frage, warum du dann dein klasse als MouseListener deklarierst, die dazu gehörenden methoden leer lässt und statt dessen den code der dort hinein gehört in einen extra MouseAdapter auslagerst. für mich sieht das nach ziemlichen unsinn aus. entweder du machst einen MouseAdapter oder deine klasse ist ein MouseListener. ich würde dir letzteres vorschlagen, damit du in den methoden auch schön auf alle variablen zugreifen kannst. sprich vergiss den vorschlag den code des MouseAdapters in den konstruktor der klasse zu verlegen, entferne den MouseAdapter und schmeiße den code seiner mouseClicked(...) methode in die mouseClicked(...) methode deiner klasse hier herein. und deine klasse registrierst du bei dem JPanel auf die du deine klasse zeichnen lässt. hier in deiner klasse selbst brauchst du überhaupt nix zu registrieren, den deine klasse ist ja kein Component und somit auch auf keiner oberfläche selbstständig darstellbar, woraus folgt, daß sie selbst auch nicht in der lage ist, MouseEvents auszuwerfen, die du empfangen und wieder verarbeiten könntest. davon abgesehen habe ich meine zweifel ob deine paintComponent(Graphics) methode überhaupt jemals von irgendwem aufgerufen wird. würde deine klasse von Component erben so hätte ich diesen zweifel nicht, jedoch wäre es unsinnig, da paint(Graphics) zuerst aufgerufen werden würde und dieses nomalerweise dann unter anderem paintComponent(...) aufruft. sprich, wenn du von Component erben möchtest, dann verlege den code von paint(Graphics) in paintComponent(Graphics), denn in paint(...) sollte man eigentlich nix zeichen (funktioniert zwar trotzdem, ist aber unsauber). ach ja, bevor ich's vergesse. wenn du von Component erben möchtest, dann vergiss nicht, daß deine Component natürlich auch irgendwie mitteilen muss, wie groß sie sein möchte. will sagen, vergiss nicht die getPreferredSize()-methode zu überschreiben.

viel erfolg

wayne
 
I

Iventar

Gast
Danke Dir für die Unterstützung, und deine Tipps. Ich werde von meinem Konstrukt absehen und die Methode MouseClicked() wieder als "eigene" Methode auslagern in der Klasse. Das war wirklich ein relativ bescheidener Gedankengang. Ich werde jetzt mal die Tipps wenn möglich einbauen, und mich ggf nochmal hier melden.

Danke & Gruss
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Methode mouseClicked mit zu übergebenden Parametern Java Basics - Anfänger-Themen 1
hdi JPanel mouseClicked() Methode reagiert nur zu 50% Java Basics - Anfänger-Themen 4
hdi JPanel mouseClicked() Methode reagiert nur zu 50% Java Basics - Anfänger-Themen 6
T Rekursive Methode Java Basics - Anfänger-Themen 13
Ü Methode soll Quadrat aus der Summer zurückgeben Java Basics - Anfänger-Themen 10
P Objekt einer Methode eines anderen Objektes übergeben Java Basics - Anfänger-Themen 5
Leyla Spezifischte Methode Java Basics - Anfänger-Themen 16
M Methode zielnah zeigt das gewünschte Ausgabe nicht an Java Basics - Anfänger-Themen 3
L Variablenwerte aus einer Methode übergeben Java Basics - Anfänger-Themen 2
T Methode soll etwas ausrechnen und zurückgeben (klappt nd) hat wer eine Idee? Java Basics - Anfänger-Themen 11
P Main Methode scheint Constructor aufzurufen, ohne dass es so gecoded ist Java Basics - Anfänger-Themen 2
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C Zugriff auf Methode Java Basics - Anfänger-Themen 2
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
T Methode akzeptiert String nicht Java Basics - Anfänger-Themen 18
M Methode sperren bis ein Kriterium erfüllt wurde Java Basics - Anfänger-Themen 3
D Switch Case Methode aufrufen Java Basics - Anfänger-Themen 3
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
Ostkreuz Wieso wird die Methode nochmal aufgerufen? Java Basics - Anfänger-Themen 5
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
MoxMorris Wie macht man String[] = String[] aus einer anderer Methode? Java Basics - Anfänger-Themen 18
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
B Wie kann ich folgende Klasse/Methode per Button ausführen? Java Basics - Anfänger-Themen 1
D Interface Methode wird ungewollt in der Subklasse überschrieben Java Basics - Anfänger-Themen 5
L Methoden Eine Methode um zu testen ob es ein Nachbar gibt Java Basics - Anfänger-Themen 10
til237 Iterative Methode in rekursive Methode umschreiben Java Basics - Anfänger-Themen 4
M Daten aus errechneter Methode in Datenbank(SQLite) schreiben Java Basics - Anfänger-Themen 60
D next() Methode mehrfach verwenden Java Basics - Anfänger-Themen 1
Ostkreuz Methoden Von Dezimal zu Hexadezimal Methode toHex Java Basics - Anfänger-Themen 2
I Entity Objekt nicht gefunden -> Webhook empfangen in der gleichen Methode (Transaktion) Java Basics - Anfänger-Themen 37
N Throw an Main Methode übergeben Java Basics - Anfänger-Themen 7
M Methoden Methode 'wiederhole' nicht gefunden (Uebersetzungsfehler) Java Basics - Anfänger-Themen 1
H Zu langen String aufteilen - bequeme Methode? Java Basics - Anfänger-Themen 14
_user_q Wie eine Methode/Funktion aus einer Klasse mit Constructor aufrufen? Java Basics - Anfänger-Themen 20
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
M Anzahl Kommandozeilenparamter mittels Methode Java Basics - Anfänger-Themen 11
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
frager2345 Problem mit Methode Java Basics - Anfänger-Themen 4
J Die statische Main-Methode ändert Instanzvariable? Java Basics - Anfänger-Themen 10
D Methode aus dem Aufrufer aufrufen Java Basics - Anfänger-Themen 1
T IOStreams read(byte[]b) methode Java Basics - Anfänger-Themen 2
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
U Beispiel Methode size() vom "Collection"-interface... Wie kann man sichtbar machen, was die Methode unter der Haube macht? Java Basics - Anfänger-Themen 8
D Warum kann ich hier nicht auf die Methode zugreifen? Java Basics - Anfänger-Themen 5
M generate Methode für Streams Java Basics - Anfänger-Themen 6
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Wozu benötigt man den BiPredicate, kann ich nicht einfach eine normale Methode nutzen, statt BiPredicate? Java Basics - Anfänger-Themen 3
T Linked List set-Methode Java Basics - Anfänger-Themen 2
D Arrays an replaceAll-Methode übergeben Java Basics - Anfänger-Themen 12
B Attribute eines Objekts einer Klasse durch statische Methode einer 2. Klasse ändern? Java Basics - Anfänger-Themen 32
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
viktor1 Methoden Methode schreiben static void readText (String filename) {...} zu WordHistogramSample.java Java Basics - Anfänger-Themen 13
W Equals-Methode überschreiben bei composition Java Basics - Anfänger-Themen 20
V Hilfe bei Implementierung einer boolean Methode Java Basics - Anfänger-Themen 6
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
V Methoden printChar Methode mit Rückgabetyp void Java Basics - Anfänger-Themen 26
F Graph Tiefensuche Methode Java Basics - Anfänger-Themen 7
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
berserkerdq2 wie funktioniert contenthandler, was muss ich bei der Methode startElement und endElement tun? Java Basics - Anfänger-Themen 11
M Warum return die Methode den Wert nicht Java Basics - Anfänger-Themen 5
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
berserkerdq2 Ich gebe eine ArrayList als List zurück per MEthode, wie kann ich nun aber die ArrayList speichern? Java Basics - Anfänger-Themen 46
S Methode Java Basics - Anfänger-Themen 4
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
U Methode wird genutzt, ohne dass ich die aufrufe? Java Basics - Anfänger-Themen 4
F nach Methode Programm nicht beenden Java Basics - Anfänger-Themen 9
Liroyd Methode mit Objektvariabel rechnen? Java Basics - Anfänger-Themen 6
H Mit setter-Methode JLabel in einer andern Klasse ändern. Java Basics - Anfänger-Themen 40
D Methode um mögliche Rezepte auszugeben Java Basics - Anfänger-Themen 12
U Warum kann ich die Methode in der ENUM Klasse nicht aufrufen? Und warum geht die Switch nicht? Java Basics - Anfänger-Themen 8
J Hallo zusammen , was macht diese Methode hier genau? Java Basics - Anfänger-Themen 3
D Array in Main Methode aus anderer Klasse aufrufen Java Basics - Anfänger-Themen 3
H Eine Methode über Actionlistener beenden Java Basics - Anfänger-Themen 8
G jButton führt Main Methode nicht richtig aus Java Basics - Anfänger-Themen 3
G Main Methode wird beim ersten Aufruf nicht richtig ausgeführt Java Basics - Anfänger-Themen 1
C60 Methoden Main-Methode erkennt meine Arrays nicht. Java Basics - Anfänger-Themen 7
A Ein Array bearbeiten und in einer anderen Methode nutzen Java Basics - Anfänger-Themen 6
A Ergebnis einer Methode bei einer anderen verwenden Java Basics - Anfänger-Themen 13
L Iteratorform und Methode mit variabler Parameterzahl Java Basics - Anfänger-Themen 31
F Methode ArrayList mit Eingabewert Java Basics - Anfänger-Themen 2
M Wie kann eine Methode für ein vorhandenes "Array von char" einen Index-Wert zurückliefern? Java Basics - Anfänger-Themen 3
M Wie kann die Implementation einer Methode den Wert eines Attributs vermindern? Java Basics - Anfänger-Themen 3
Csircc Rekursive Methode Stack Overflow Java Basics - Anfänger-Themen 10
M Wie kann eine Methode (string) eine andere Methode (void) mit zufälligen int-Werten aufrufen? Java Basics - Anfänger-Themen 4
M Wie verknüpfe ich eine Bedingung mit einer Methode ohne if-Verzweigung & Bedingungsoperator? Java Basics - Anfänger-Themen 2
M Wie kann eine Methode eine andere Methode um Werte wie z.B. 1 erhöhen? Java Basics - Anfänger-Themen 6
schredder Strings und reguläre Ausdrücke - Methode mit return string.matches Java Basics - Anfänger-Themen 5
D mehrere Berechnungen in einer Methode Java Basics - Anfänger-Themen 9
H String Repräsentation eines Rechtecks mit Instanz-Methode Java Basics - Anfänger-Themen 8
M Wie kann ich eine Methode aus einem Interface in eine Klasse implementieren, so dass sie ihre Funktion ausführt? Java Basics - Anfänger-Themen 7
J ArrayList add methode selbst programmieren Java Basics - Anfänger-Themen 10
X Methoden Methode zur Punktezählung in Blackjack Java Basics - Anfänger-Themen 2
W Methode ändern Java Basics - Anfänger-Themen 65

Ähnliche Java Themen

Neue Themen


Oben