2012-09-03 19 views
5

Bir düğme için bir actionListener'de bir form oluşturmak istiyoruz.CodeNameOne Dinamik olarak oluşturulmuş form, "Back" nasıl yapılır

Ör şey gayet iyi çalışıyor ..... ama

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(); 
    } 
}); 

"Geri" düğmesini

kimse ActionListener dinamik formunu uygulanması doğru yolu biliyor mu çalışmaz gibi ya Önceden tanımlanmış bir forma atlamak ve Eylem Dinleyicisi?

Teşekkür

James

cevap

3

Bir arka komutu oluşturmak ve formu ile ilişkilendirmek gerekir:

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); 

Sen tamamen elle kodlanmış olan mutfak lavabosu demo görebilirsiniz.

+1

Merhaba Shai, Cevabınız için teşekkürler. Çok şansım yok. Bir formda bir liste var. Her liste öğesinde bir düğme vardır, bu düğmenin bir formunu anında üreten bir actionListener vardır. Geri dönebilmek için liste oluşturucu sınıfına geri dönebilirim ancak getComponentForm() bu noktada bir NPE alıp ..... parentForm.showBack() öğesini ayarlamak için parentForm'u nasıl alacağından emin değilsiniz. – jamesarbrown

+1

Bir önceki formu yeniden oluşturmanız gerekiyor, bu GUI oluşturucuda yaptığımız şeydir. Alternatif olarak, RAM'deki formları, bariz hafıza maliyeti sonuçlarıyla koruyabilirsiniz. –

+0

Tamam, yeni bir form oluşturulduğunda eski form nesnesinin bellekten bırakıldığını fark etmedi. Döngüsel bir şekilde nasıl yeniden yapılandırılacağını düşünecekler. – jamesarbrown

0

Ayrıca Yani örneğin Parametre olarak

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(); 
} 

formunu veren olabilir: ben yanlış birşey yaptıysam

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, bu lütfen düzeltin. Teşekkürler.

İlgili konular