Symbol kann nicht aufgelöst werden - müsste aber eigentlich

Status
Nicht offen für weitere Antworten.

Kiamur

Aktives Mitglied
Hallo!

Ich versuche mich gerade an einem Programm, das mal in einer Java-Klausur gefragt war. Es ist eigentlich recht sinnlos, deshalb wundert euch nicht.

Mein Problem ist, dass mir der Compiler immer die Fehlermeldung "cannot resolve symbol symbol : method getLabel ()" ausgibt. Ich habe die Stelle mal im Quellcode mit Kommentar markiert.

Wenn ich aber doch java.awt.* eingebundene habe, und er bei Button usw. auch nicht meckert, was ist denn dann der Fehler?

Code:
import java.awt.*;
import java.awt.event.*;
 	
public class gitter
{
	String[][] bezeichnungen = 
		{	{"oben links", "oben Mitte", "oben rechts"},
			{"unten links", "unten Mitte", "unten rechts"}
		};
	Frame f = new Frame();
	
	class WindowEventHandler extends WindowAdapter
  	{
    	public void windowClosing(WindowEvent evt)
    	{
      		System.exit(0);
    	}
  	}
  	
  	class MouseEventHandler extends MouseAdapter
  	{
    	public void mousePressed(MouseEvent evt)
    	{
      		String label;
                                // Hier meckert er, dass er getLabel() nicht kennt !?!
      		label = this.getLabel();

      		System.out.println(label + " gedrueckt !");
    	}
  	}
  	
	
	void bezeichnungZuordnen()
	{
		Button b1 = new Button(bezeichnungen[0][0]);
		Button b2 = new Button(bezeichnungen[0][1]);
		Button b3 = new Button(bezeichnungen[0][2]);
		Button b4 = new Button(bezeichnungen[1][0]);
		Button b5 = new Button(bezeichnungen[1][1]);
		Button b6 = new Button(bezeichnungen[1][2]);
		
		b1.addMouseListener(new MouseEventHandler());
		b2.addMouseListener(new MouseEventHandler());
		b3.addMouseListener(new MouseEventHandler());
		b4.addMouseListener(new MouseEventHandler());
		b5.addMouseListener(new MouseEventHandler());
		b6.addMouseListener(new MouseEventHandler());
		
		f.setLayout(new GridLayout(2,3));		
		
		f.add(b1);
		f.add(b2);
		f.add(b3);
		f.add(b4);
		f.add(b5);
		f.add(b6);
		
		f.addWindowListener(new WindowEventHandler());
		
		f.pack();
		f.show();
	}
	
	
	public static void main(String[] ards)
	{
		gitter Gitter = new gitter();
		
		Gitter.bezeichnungZuordnen();
	}
}

Vielen Dank schon mal !!

Gruß
Maik
 
Das this soll sich wohl auf irgendeinen Button beziehen.. welchen den? Du kannst die Frage nicht beantworten (ebensowenig der Compiler), weil es mehrere Buttons gibt.

Aber du kannst über das MouseEvent an den Button kommen:
Code:
Button b = (Button)evt.getSource();
b.getLabel();

P.S. aber eigentlich fügt man Buttons sowieso ActionListener, und nicht MouseListener hinzu, die sprechen dann nämlich auch auf Tastatureingaben an :wink:
 
Hallo Beni!

Vielen Dank für die schnelle Antwort !

Deine Version funktioniert ja tadellos !!!

Ich habe eigentlich gedacht, dass die Methode "mousePressed" immer von der jeweiligen Button-Instanz aufgerufen wird, und dann schon weiß, dass sich das this eben auf diesen Button bezieht.

Naja, hast du vielleicht noch kurz Lust mir mal zu zeigen, wie ich das mit ActionListener realisiere. Das mit dem MouseListener schien mir zunächst das naheliegenste.

Gruß
Maik
 
Genau gleich wie ein MouseListener, z.B. so (mit einer anonymen Klasse):

Code:
Button button = ...
button.addActionListener( new ActionListener(){
  public void actionPerformed( ActionEvent e ){
    System.out.println( "Pressed: " + ((Button)e.getSource()).getLabel() ); 
  }
});
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben