1

私はcodenameoneを使用してモバイルアプリケーションを開発しています。このアプリケーションでは、いくつかのクラスとコードを手動で実装します。たとえば、何らかの理由でcodenameoneデザイナーを使用せずにハードコーディングしてすべてのフォームを作成します。

ちなみに、codenameoneが使用するようなフォームでナビゲートしたかったので、Form呼び出されたタイプの変数を1つ使用prevFormし、フォームを開きたいときに現在のフォームに設定してから、新しいフォームを表示します。

わかりました、それがメインシナリオです。このアプリケーションでは、国際化も実装したいので、このアプリケーション用に独自のハッシュテーブル(ペルシア語と英語)を作成します。

これが私の問題です:

  1. 言語を設定または変更して、開いたフォームに適用するにはどうすればよいですか?

  2. フォーム間を移動するための私の方法は良いですか?

これが私のコードです:

public class BaseForm extends Form implements ActionListener {
public BaseForm(){
    this.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
}

Command exit, ok, back;
Form prevForm;

protected void initForm(){

}

protected void showForm(){

}

protected void showForm(final Form prevForm){
    //String name = this.getName();
    //if("Reminder".equals(name) || "3Transaction".equals(name))
    {
        this.prevForm = prevForm;
        Form f = this;
        back = new Command("Back");
        //ok = new Command("Ok");
        //delete = new Command("Delete");;
        Button button = new Button("Button");

        f.addCommand(back);
        //f.addCommand(ok);
        //f.addCommand(delete);
        //f.addComponent(button);

        f.addCommandListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                if (ae.getCommand().equals(back)) {
                    //Do Exit command code
                    System.out.println("Back pressed");
                    prevForm.showBack();
                } else if (ae.getCommand().equals(ok)) {
                    //Do Start command code
                    System.out.println("Ok pressed");
                }
            }
        });

        button.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent ae) {
                //Do button code
                System.out.println("Action performed");
            }
        });
    }
    showForm();
}}

ネストされたフォームを開くには、次のコードを使用します。

LanguageUI lang = new LanguageUI();
lang.showForm(this);

言語の変更[フォーム]:

protected boolean onBtnSave() {
    if(isRbFarsiSelected()){
        UIManager.getInstance().setResourceBundle(new CommonSettings().getFarsi());
    }
    else {
        UIManager.getInstance().setResourceBundle(new CommonSettings().getEnglish());
    }

    return false;
}
4

1 に答える 1

2

また、lwuit で UI をハードコーディングしています。また、すべてのクラスに変数のparentForm があるため、以前のフォームを簡単に表示できます。言語の変更については、リソース エディターに利用できるローカリゼーションがあることを知っています。以下、アクセス方法です。コードでresファイルにL10Nの内容を設定する方法がトリックだと思いますか?一方、以下のメソッドを反映する独自のヘルパー クラスを作成することもできます。

Resources theme = Resources.open("/theme.res");
theme.getL10N(id, locale);
theme.getL10NResourceNames();
theme.isL10N(name);
theme.listL10NLocales(id)
于 2012-12-05T11:47:48.927 に答える