Originariamente inviato da jonnykaraoke
ho provato a dichiarare l'oggetto swing in static ma l'espressione è illegale
update:
prima del costruttore scrivo:
static{
A a=new A();
}
e non mi da errore però non posso usare l'oggetto creato (a) in altri oggetti...cosa sbaglio?
Quello che hai definito è un blocco static, serve per fare cose particolari come l'assicurarsi l'inizializzazione di un oggetto.
Una variabile static (altamente sconsigliata) si definisce come:
public static <final*> <tipo> <nome_identificativo> = <inizializzazione>
* final serve per creare delle costanti.
codice:
public class MiaClasse{
public static Integer MAX_ELEMENTS = 5;
}
Perché altamente sconsigliata? perchè a questo punto non sono più attributi dell'oggetto ma sono "di classe" cioè appartengono alla classe (rif al mio esempio MiaClasse.MAX_ELEMENTS)
Se le usi come l'ho indicata io, vanno bene perché appunto sono solo delle costanti, ma se le usi per violare l'incapsulamento potresti incorrere in diverse rogne, soprattutto se un giorno svilupperai con applicazioni web.
Piuttosto prova una cosa più sofisticata ma decisamente più flessibile e potente.
Dal tuo esempio sembra quasi tu stia facendo un Wizard.
Separa i moduli dal loro controller.
I moduli implementeranno un'interfaccia che gli permette di comunicare con il controller attraverso delle callback.
E' il controller che decide quale modulo (A,B,C,D) mostrare e che si occuperà di mostrare o nascondere determinati bottoni. I moduli A,B,C,D attraverso una cosa tipo:
codice:
public interface Modulo{
void initModulo(... qui passi i riferimenti ai dati che ti servono);
void moduloStart();
void moduloEnd();
}
Capisco che è una soluzione più complessa inizialmente ma dopo che hai capito il gioco vedrai come il codice presenterà molti meno problemi, sarà più facile da espandere e modificare.