Wie greife ich vonEvent-Handler auf Attribut einer Klasse zu

Status
Nicht offen für weitere Antworten.

jehowa

Neues Mitglied
hallo alle miteinander,

seit ca. 3 Tagen bringt mich ein Problem, welches wahrscheinlich aus Eurer Sicht gar keines ist, fast um den Verstand:

Code:
public class A extends MouseMotionAdapter
{
		int i = 0 ;
			
		.	
		.
		.	

         public int getWert(){
                 return this.i;
         }


	public void mouseMoved(MouseEvent e)
 	{ 	 	
 		A.i = 20; 	 		 	 	 	 	 	  
 	}	
}

Zur Funktion:
Im hier nicht aufgezeigten restlichen Code vereinbare ich ein Frame und füge den Listener dem Frame zu (mit addMouseMotionListener). Wenn die Maus im Frame bewegt wird soll dem Attribut i der Wert 20 zugewiesen werden.

Problem:
Aus dem Event Handler(mouseMoved) ist es mir wie oben aufgezeigt nicht möglich den Wert des Attributes i zu verändern. Die Methode getWert liefert immer 0 zurück!
In einem Buch habe ich gelesen, dass dies bei 'Klassen-Klassen' auch in Ordnung ist und dass hier eine 'Instanz-Klasse' erzeugt werden muß. wie mache ich das oder gibt es vielleicht eine andere Methode?

Danke!
 

mariopetr

Bekanntes Mitglied
also so laesst sich der code garantiert nicht compilieren (static access to non static value)

versuche mal

Code:
public class A extends MouseMotionAdapter 
{
  int m_i=0;
  
  public int getI()
  {
     return m_i;
  }

 public void mouseMoved(MouseEvent e) 
 { 
   m_i = 20; 
 } 
}

das ganze dann noch mit

A a=new A();

instanzieren und der enteprechenden componente als mousemotionlistener uebergeben.

ps: warum funktionieren die code tags nicht?
 

jehowa

Neues Mitglied
Ersteinmal Danke für Deine schnelle Antwort.
Ich habe Deinen Vorschlag wie unten dargestellt umgesetzt:
1.)Datei Application.java
Code:
public class Application extends WindowAdapter
{
	public static void main (String [] args)
	{
		Frame f = new Frame();
		f.setSize (150, 150);
		f.addWindowListener(new Application());
		
		A a = new A();		
		
		f.addMouseMotionListener(a);
			
		f.show();
		
		System.out.println(a.getI());
	}
//--------------------------
 		public void windowClosing(WindowEvent e)
 		{                           
 			System.exit(0);
		}        		
}

2.)Datei A.java
Code:
public class A extends MouseMotionAdapter
{
		int m_i = 0 ;	

//--------------------------
	public int getI()
	{
		return m_i; 
	}
	
//--------------------------
 	public void mouseMoved(MouseEvent e)
 	{ 	
 	         //System.out.println("test");
 		m_i = 20; 	 		 	 	 	 	 	  
 	}	
}
Als Ausgabe erhalte ich immer noch '0' !
Um zu überprüfen, ob der Event-Handler überhaupt angesprungen wird, habe ich die kommentierte Zeile mit der Ausgabe 'test' entkommentiert. Entsprechend der Anzahl der MouseMoved-Ereignisse wurde 'test' ausgegeben.
 

bummerland

Top Contributor
mariopetr hat gesagt.:
ps: warum funktionieren die code tags nicht?

unter dem eingabefeld für den text befinden sich checkboxen. Hier darf bei BBCode in diesem Beitrag deaktivieren kein häkchen gesetzt sein, damit die code-tags funktionieren.
 

mariopetr

Bekanntes Mitglied
@becstift: aha, mann lernt halt immer was dazu

@jehowa:

naja, warscheinlich liegt das an

f.show();
System.out.println(a.getI());

so schnell bewegt niemand die mouse.
verscuhe doch mal stattdessen

Code:
f.show();
while(a.getI()==0)
{
  try
  {
    Thread.sleep(250);
  }	
  catch (Exception e)
  {
  }
  System.out.println("aber hallo");
}
 

Nobody

Top Contributor
ne ne 1/4 sec finde ich aber dann doch etwas lange, etwas kürzer würde es auch tuen

ps ich habs bei dir schonmal deaktiviert gehabt (glaube ich zumindest)
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben