我使用codenameone来开发我的移动应用程序。在这个应用程序中,我手动实现了一些类和代码,例如,由于某些原因,不使用codenameone设计器通过硬编码创建所有表单。
顺便说一下,我想用codenameone使用的形式导航,所以我使用Form
类型中的一个变量称为prevForm
,当我想打开一个表单时,我将其设置为当前形式,然后我显示新的形式。
好的,那是主要场景。在这个应用程序中,我也想实现国际化,所以我为这个应用程序创建了自己的哈希表(波斯语和英语)。
这是我的问题:
如何设置或更改语言并将其应用于我打开的表单?
我在表单之间导航的方法是否合适?
这是我的代码:
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;
}
答案 0 :(得分:2)
我也在lwuit上硬编码我的UI,并且我在每个类上都有一个变量parentForm,所以我可以很容易地显示以前的表单。对于语言更改,我知道您可以使用资源编辑器中的本地化。以下是如何访问它。我想诀窍是如何在代码中设置res文件中L10N的内容?另一方面,您可以创建自己的帮助程序类,以反映下面的方法。
Resources theme = Resources.open("/theme.res");
theme.getL10N(id, locale);
theme.getL10NResourceNames();
theme.isL10N(name);
theme.listL10NLocales(id)