Ci sono utenti su questo forum molto ma molto più competenti di me in materia che saprebbero risponderti (ma non lo fanno XD). Tutto ciò che posso consigliarti è provare a dare un'occhiata al pattern observer. Io ho provato ad usarlo per problemi relativamente semplici ed è molto intuitivo. Detto in parole molto povere, le interfacce grafiche che devono modificarsi al seguito di un evento si registrano come observer, mentre chi scatena l'evento si registra come observable. Le varie views letteralmente "osservano" le classi "osservabili". Observer è un'interfaccia, quindi la classe che la implementa deve definire il metodo update(Observable obs, Object mex). In questo metodo provvederai a svolgere le operazioni che modificheranno la tua UI. Gli observable notificano che è avvenuto un cambiamento tramite i metodi setChanged() + notifyObservers(messaggio). Dovrai quindi anche creare una classe apposita che rappresenta un messaggio, in modo che all'interno del metodo update(...) potrai capire che tipo di cambiamento è avvenuto.

Esempio di messaggio:

codice:
package it.dadi.message;


public class MsgObserver {
	
	public final static int TURNOCOMPUTER = 0;  
	public final static int PCGIOCATO = 1;
	public final static int TURNOUTENTE = 2;
	public final static int UTENTEGIOCATO = 3;
	public final static int VINTOMANOCOMPUTER = 4;
	public final static int VINTOMANOGIOCATORE = 5;
	public final static int PAREGGIOMANO = 6;
	public final static int VINTOCOMPUTER = 7;
	public final static int VINTOGIOCATORE = 8;
	public final static int PAREGGIO = 9;
	public int code;
	public Object msg;


	public MsgObserver(int code, Object msg) {
		this.code = code;
		this.msg = msg;
	}
}
L'ho usato per il mio giochino di dadi.