Von Variable auf Klasse schließen



  • Hi,

    ich habe folgende Programmsturktur:

    class A implements MouseListener {
    
    mouseClicked(MouseEvent e) {
        // ### Punkt X ###
    }
    
    }
    
    class B {
    
    int z;
    JLabel label = ...
    
    init(A a) {
        label.addMouseListener(a);
    }
    }
    

    Am Punkt X kann ich mit e.getSource() auf die Instance des JLabels zugreifen, auf da geklickt wurde. Ich möchte jetzt aber auf das z der zugehörigen Klasse B zugreifen können.
    Warum? jede Instanz der Klasse B stellt ein Spielfeld dar(mit ein paar eigenschaften, z.b. z und einem label, dass man mit diesem Spielfeld interagieren kann). Aber die zentrale Auswertung würde ihc gerne von dem Spielfeld kapseln.

    Kann mir jemand einen Tipp geben wie da sfunktioniert (oder sagen falls es nicht geht^^) ?



  • Hallo,

    Was Du vor hast, wird leider so nicht funktionieren.

    Mein Tipp für eine einfache Lösung: Lasse B den MouseListener implementieren, nicht A und rufe in der mouseClicked-Funktion die Analysefunktion aus A auf. Dann brauchst Du nicht mit JLabel herumtun, weil Du in B den z-Wert kennst.



  • Das ist die erwartete aber nicht die erhoffte Antwort^^. Trotzdem danke. Jetzt muss ich wenigstens nicht weiter vergeblich suchen^^

    👍



  • A einfach eine Referenz auf B geben?



  • Eine Möglichkeit (zugegeben, vielleicht nicht die schönste ^^) dass du für jedes B eine neue Instanz von A erzeugst und dann einen Konstruktor mit einem Parameter der Klasse B machst.

    So ungefähr:

    class A implements MouseListener {
    
    	B b;
    
    	public A( B b){
    		this.b = b;
    	}
    
    	@Override
    	public void mouseClicked(MouseEvent e) {
    
    		int a = b.z; // hier kannst du nun z aus der Klasse B aufrufen
    
    	}
    
        //...
    }
    
    class B {
    
    	int z;
    	JLabel label;
    
    	void init(){
    		label.addMouseListener( new A(this) );
    	}
    }
    

Anmelden zum Antworten