Event Handling Kommunikation eines JButton ueber JPanels hinaus

FerFemNemBem

Bekanntes Mitglied
Guten Morgen,

ich habe einen "Einstellungsdialog" gebastelt, welcher wie folgt aufgebaut ist:

Ein JDialog, welcher als Hauptfenster dient und im unteren Bereich 3 Buttons "Uebernehmen", "Zuruecksetzen" und "Schliessen" hat. Auf diesem JDialog ist eine JTabbedPane, welche 3 JPanels mit verschiedenen Einstellmoeglichkeiten hat. Die 3 oben genannten Button sind immer sichtbar - egal auf welchem JPanel auf der JTabbedPane man sich gerade befindet.

Nun mein Problem: ich wuerde gerne realisieren, dass der "Uebernehmen" Button nur aktiv ist, wenn sich etwas in einem Element der JPanels geaendert hat. Die Events von den Elementen innerhalb der JPanels zu bekommen ist nicht das Problem - aber wie reiche ich die an den uebergeordneten JDialog weiter?

Als erstes fiel mir dazu die Observer/Observable Geschichte ein. Die faellt aber wegen der Mehrfachvererbung raus. Die zweite Idee waere, die JButtons mit an die JPanels zu uebergeben und dort dann entsprechend zu aktivieren/deaktivieren. Aber irgendwie gefaellt mir diese Methode nicht.

Hat jemand eine Idee, wie ich das elegant loesen koennte?

Danke!

Gruss, FFNB.
 
Also elegant löst man das mit einem Listener. Da ist mehrfachvererbung kein Problem, da du die Listener Struktur in der super-Klasse realisieren kannst.
 
Schreib dir deinen eingenen Listener.

Naja wenn sich im JPanel etwas ändert, dann soll gefeuert werden. Dein Einstellungsfenster registriert sich bei dem JPanel.
 
Kleiner Denkanstoß:

Java:
import java.util.ArrayList;
import java.util.EventListener;
import java.util.EventObject;
import java.util.List;


public class Test {

	public static void main(String[] args) {
		Test t = new Test();
		
		t.changing();
		
	}
	
	List<MyListener> listener = new ArrayList<MyListener>();
	
	public Test() {
		new EinstellungsPanel(this);
	}
	
	void changing() {
		for(MyListener l : listener) {
			l.changed(new EventObject(this));
		}
	}
	
	void registerListener(MyListener l) {
		listener.add(l);
	}
	
	void removeListener(MyListener l) {
		listener.remove(l);
	}
	
	
	public interface MyListener extends EventListener {
		void changed(EventObject e);
	}
	
	public class EinstellungsPanel implements MyListener {
		
		boolean isButtonActive = false;
		
		public EinstellungsPanel(Test t) {
			t.registerListener(this);
			System.out.println("Button active = " + isButtonActive);
		}

		@Override
		public void changed(EventObject e) {
			isButtonActive = true;
			System.out.println("CHANGED");
			System.out.println("Button active = " + isButtonActive);
		}
		
	}
	
}

[EDIT]Ach schon wieder zuviel arbeit gemacht 🙂 wenns noch Fragen gibt: Listener Pattern[/EDIT]
 
Zuletzt bearbeitet:

Zurück
Oben