Mouseevents

Status
Nicht offen für weitere Antworten.

keimax

Mitglied
Hallo

ich habe ein Array von JLabels die auf einem Fenster verteilt sind.

Jetzt möchte ich per Mouseevents abfragen welches JLabel angeklickt wurde.
Dieses Label sondern ein anderes Icon zugewiesen bekommen.
Aber irgendwie komme ich nicht an das Label ran.

Code:
MouseListener mouse1 = new MouseListener() {
	public void mouseClicked(MouseEvent e) {
		
		
	}
}
...


und in einer for schleife wo die Arrays gefüllt werden habe ich noch

Code:
tiles[i].addMouseListener(mouse1);

gibt auch keine Fehlermeldung.

Ich weiss nur nicht wie ich an das entsprechende Labelobjekt rankomme.
Verstehe das Objekt e nicht so ganz.

Ich hoffe ich muss nicht per Mauskoordinaten jedesmal das entsprechende Label finden lassen???


Danke für eure Antwort und Hallo an alle!!

Keimax
 

L-ectron-X

Gesperrter Benutzer
Die Quelle des Ereignisses ließe sich mit
Code:
Object source = e.getSource();
bestimmen.
 

keimax

Mitglied
Danke für die Antwort,

aber wie kann ich mit dem GetSource arbeiten?


ich habe tiles. (Jlabels)

jetzt möchte ich z.B wenn tiles[5] angeklickt wurde, das sich das icon von tiles[5] ändert.


ich habe halt einen mouselistener. Dieser müsste mir doch sagen können welches tile angeklickt
wurde oder?

Ich bekomme leider nur gesagt, dass ein JLabel angeklickt wurde.
Habe mir das e Objekt mal ausgeben lassen:

Code:
void ausgabe(String beschreibung, MouseEvent e) {
	System.out.println(beschreibung + " festgestellt in "
	+ e.getSource());


Konsolenausgabe ist dann:

Mouse click festgestellt in javax.swing.JLabel[,40,0,40x40,alignmentX=0.0,alignmentY=0.0,border=,flags=8388608,maximumSize=,minimumSize=,
preferredSize=,defaultIcon=images/matrix.gif,disabledIcon=,horizontalAlignment=CENTER,horizontalTextPosition=TRAILING,
iconTextGap=4,labelFor=,text=,verticalAlignment=CENTER,verticalTextPosition=CENTER]

Aber damit weiss ich ja leider nicht welches meiner vielen JLabels angeklickt wurde, nur die Koordinaten hab ich.
Vielleicht steh ich auch einfach auf dem Schlauch oder habe irgendwas noch nicht kapiert :)


ciao
 
S

SlaterB

Gast
mache einfach
JLabel source = (JLabel) e.getSource();
source.setIcon(..);

mit dem Source-Objekt kannst du direkt arbeiten!,
natürlich weißt du so noch nicht, welches JLabel im Array das ist,

wenn du noch den Index herausbekommen möchtest,
dann könntest du das Array in einer Schleife durchlaufen und source mit jedem Element vergleichen (==)

bringt dir aber nur das i, sonst nix weiter, scheint also in diesem Falle unnötig
 

keimax

Mitglied
Danke,

das hat mich weitergebracht!!!

Kann jetzt endlich jedes angeklickte Tile identifizieren und das Icon ändern:


Code:
MouseListener mouse1 = new MouseListener() {
	public void mouseClicked(MouseEvent e) {
		ausgabe("Mouse click", e);
		
		JLabel source = (JLabel) e.getSource();
		tiles[Integer.valueOf( source.getName() ).intValue()].setIcon(icon2);
		System.out.println(source.getName());
		
//		if (source == tiles[0])System.out.println(" JAA1");   // Testrelikt
		;
		
	}

Danke nochmals.

ps. source.getName() funktioniert als index, da ich bei der erstellung den Index als Namen eingetragen habe.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben