2012-09-03 15 views
5

In un actionListener per un pulsante, vorremmo creare un modulo al volo.CodeNameOne Modulo creato dinamicamente, come "Indietro"

Eg Qualcosa di simile

Button b = new Button("Clickme"); 
b.setActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     Form f = new Form(); 
     Container c = new Container(); 
     ... 
     f.addComponent(c); 
     f.show(); 
    } 
}); 

che funziona bene ..... ma pulsante "indietro" non funzionerà

Qualcuno sa il modo corretto di attuare una forma dinamica in un ActionListener, o saltando su un modulo predefinito attraverso e ascoltatore di azioni?

Grazie

James

risposta

3

È necessario creare un comando indietro e associarlo con la forma:

Command back = new Command("Back") { 
    public void actionPerformed(ActionEvent ev) { 
     // notice that when showing a previous form it is best to use showBack() so the 
     // transition runs in reverse 
     showPreviousForm(); 
    } 
}; 
f.setBackCommand(back); 

si può vedere questo in cucina lavandino demo che è interamente codificato mano.

+1

Ciao Shai, grazie per la risposta. Non avendo molta fortuna Ho una lista in una forma. Ogni elemento dell'elenco ha un pulsante, quel pulsante ha un actionListener che genera un modulo al volo. Posso tornare alla classe listrerer, ma richiamare getComponentForm() a quel punto ottiene un NPE ..... quindi non sono sicuro di come ottenere genitoreForm per impostare parentForm.showBack(). – jamesarbrown

+1

È necessario generare nuovamente il modulo precedente, questo è esattamente ciò che facciamo nel builder della GUI. In alternativa è possibile mantenere le istanze del modulo nella RAM con le ovvie implicazioni sul costo della memoria. –

+0

Ok, non realizziamo che il vecchio oggetto modulo viene rilasciato dalla memoria quando ne viene generato uno nuovo. Avrà un pensiero su come ristrutturare in modo ciclico. – jamesarbrown

0

si potrebbe anche dare il modulo come parametro

chooseDB(c.getComponentForm()); 

private void chooseDB(final Form main) { 
    Form f = new Form("Choose a Database"); 
    ... 
    Command backCommand = new Command("Back") { 
     public void actionPerformed(ActionEvent ev) { 
      main.showBack(); 
     }}; 
    f.addCommand(backCommand); 
    f.setBackCommand(backCommand); 
    f.show(); 
} 

Così, per il tuo esempio:

Button b = new Button("Clickme"); 
b.setActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { 
     Form f = new Form(); 
     Container c = new Container(); 
     Command backCommand = new Command("Settings") { 
     public void actionPerformed(ActionEvent ev) { 
      b.getComponentForm().showBack(); 
     }}; 
    f.addCommand(backCommand); 
    f.setBackCommand(backCommand); 
     f.addComponent(c); 
     f.show(); 
    } 
}); 

Shai, si prega di correggere questo, se ho fatto qualcosa di sbagliato. Grazie.

Problemi correlati