2012-09-10 12 views
5

Estratto: Sto cercando un modo per configurare il generatore di codice di Eclipse Window Builder per posizionare i suoi riferimenti oggetto nel corpo della classe anziché localmente nel metodo initalize() .Controllo dei riferimenti a oggetti GUI creati da Eclipse Window Builder

dettagliata:

costruttore Window è dotato di un generatore di codice/analizzatore di codice che può generare il codice della GUI da un 'form designer grafica' e viceversa. È molto utile progettare rapidamente le GUI e imparare come funzionano i vari framework in java (specialmente per i principianti di Java). Tuttavia, sto riscontrando problemi nell'usare il codice generato nella mia progettazione quando si spostano verso configurazioni GUI più sofisticate. Il problema è che la maggior parte del codice generato viene inserito nel metodo initialize() che rende gli oggetti residenti nello scope locale e difficili da ottenere riferimenti da "outside".

Finora sono stato copia/incollare le dichiarazioni di tipo dal metodo di initialize() nel corpo della classe manualmente come pubblico di accedere a loro, ma questo sembra in qualche modo l'approccio sbagliato. Funziona bene finché non riorganizzo la GUI da Graphical Designer. In tal caso, il generatore di codice inserisce nuovamente le dichiarazioni di tipo nel metodo initialize().

codice generato automaticamente è simile al seguente:

// AUTO-GENERATED CODE 
    public class MyGUI { 
     private void initialize() { 
      // gui objects declared AND created in this scope by Window Builder 
      JFrame frame = new JFrame(); 
      JPanel panel_1 = new JPanel(); 
      frame.getContentPane().add(panel_1); 
    } 
    } 

Quello che vorrei è:

public class MyGUI { 
      // accessible from outside 
      public Frame frame = null; 
      public JPanel panel_1 = null; 

     private void initialize() { 
      // gui objects only created in this scope 
      frame = new JFrame(); 
      panel_1 = new JPanel(); 
      frame.getContentPane().add(panel_1); 
    } 
    } 

Ho cercato nella documentazione per una soluzione (scarsa documentazione su questo), e ho anche studiato le varie preferenze di Window Builder ma finora non ho avuto fortuna. C'è il "data binding" ma sembra implementare MVC (legare gli elementi dell'interfaccia grafica a un modello) e piuttosto eccessivo.

C'è un motivo di progettazione che mi manca, o dovrei "pescare" i riferimenti fuori dallo scope locale di initialize() in qualche modo?

risposta

2

Nella finestra Preferenze, espandere WindowBuilder e Swing (o SWT), quindi espandere Generazione codice. Esistono opzioni per dichiarare le variabili localmente, come campi a livello di classe e inizializzate pigramente. Puoi anche scegliere istruzioni flat o block. Ci are some examples in the documentation under WindowBuilder Pro User Guide > Preferences > Swing di cosa cercare.

+0

Grazie, è esattamente quello che stavo cercando. Potresti indicare l'argomento in cui è documentato. Ho controllato il documento, ma non riesco a trovarlo. – count0

+0

@ count0 Manuale dell'utente di WindowBuilder Pro> Preferenze> Altalena: è possibile spostarsi lungo il lato sinistro della pagina. Modificherò questo alla mia domanda: intendevo che il link andasse direttamente a questa pagina. –

Problemi correlati