2012-09-03 15 views
5

ボタンのactionListenerでは、フォームをオンザフライで作成したいと考えています。CodeNameOne動的に作成されたフォーム、「戻る」方法

例:何かが正常に動作します.....しかし

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

は、「戻る」ボタンは、

は誰でものactionListenerでダイナミックなフォルムを実現するための正しい方法を知っています動作しませんようにかあらかじめ定義されたフォームにジャンプして、アクションListenerを使用しますか?あなたが戻ってコマンドを作成して、フォームとそれを関連付ける必要があり

ジェームズ

答えて

3

ありがとう:

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

あなたは完全に手コード化されて台所の流しのデモでこれを見ることができます。また、あなた例えばので、パラメータ

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

をフォームを与える可能性が

+1

こんにちは、お返事ありがとうございます。多くの運がない。私はフォームのリストを持っています。各リスト項目にはボタンがあり、そのボタンにはフォームを即座に生成するactionListenerがあります。私はlistrendererクラスにドリルバックすることができますが、その時点でgetComponentForm()を呼び出すとNPEが得られます。そのため、parentFormを取得してparentForm.showBack()を設定する方法がわかりません。 – jamesarbrown

+1

前のフォームを再度生成する必要があります。これは、GUIビルダーで行うこととまったく同じです。あるいは、明らかなメモリコストの影響を受けてフォームインスタンスをRAMに保持することもできます。 –

+0

新しいオブジェクトが生成されたときに、古いフォームオブジェクトがメモリから解放されていることを認識しませんでした。循環的な方法で再構成する方法を考えているだろう。 – jamesarbrown

0

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

シャイ私は何も悪いことをした場合、これを修正してください。どうも。

関連する問題