使用lwuit 1.4创建动态按钮到表单

时间:2011-07-27 12:09:39

标签: java-me lwuit midlet lwuit-resource-editor

public class StateMachine extends StateMachineBase {

public Container con1;

protected void beforeMainForm(Form f) {
           con1 = findMenucon(f);<Br>
           super.beforeMainForm(f);<br>
  }
}

//class mainmidlet()
public void run() {

    try {
        //new StateMachine("/App.res");
        new mainform("/App.res");
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}


class mainform  implements ActionListener{

Vector bname;
Button[] b;
String mainmenu=null;
Form frm;
mainform(String string) {

try {
Resources res = Resources.open(string);
UIManager.getInstance().setThemeProps(res.getTheme(res.getThemeResourceNames()[0]));          

UIBuilder builder = new UIBuilder();
frm = (Form)builder.createContainer(res, "MainForm");
StateMachine sm=new StateMachine("/App.res");
System.out.println("------->>>");
bname=new Vector();
this.readmenu();
b = new Button[bname.size()];
System.out.println(b.length+bname.toString());
        for (int i = 0; i<b.length; i++) {
            b[i] = new Button(bname.elementAt(i).toString());
            b[i].setAlignment(Label.CENTER);
            b[i].getStyle().setMargin(2,5,5,5);
            b[i].getStyle().setPadding(5,5,5,5);
            System.out.println(b[i].toString());
            b[i].addActionListener(this);
            sm.con1.addComponent(b[i]);
            //System.out.println("\n " + b[i]);
   }
frm.addComponent(sm.con1);
frm.show();
}
catch(IOException err) {
err.printStackTrace();
}

public void actionPerformed(ActionEvent ae) {
    throw new UnsupportedOperationException("Not supported yet.");
}

我使用上面的代码使用json创建动态Button。我可以在控制台中获取该值但无法获得Button

中的Form

2 个答案:

答案 0 :(得分:1)

显然不正确使用状态机(不是1.4 BTW的一部分),因为基类将自己创建并显示一个表单并设置自己的主题(覆盖之前所做的任何事情)。

您还忽略了con1的创建/定义,并包含了不会在设备上运行的UnsupportedOperationException调用。

你所有的LWUIT代码都应该在状态机中,请按照包括t-zone演示的演示,我们在那里动态替换标题来创建动画。所有这些代码完全在状态机中,我们覆盖特定的表单初始化方法并从那里修改表单。

如果您想手动编写所有内容,请不要使用状态机,只需直接使用UIBuilder即可。

答案 1 :(得分:0)

我认为你应该在构建你的Buttons之后,你仍然可以在show之后将它们添加到Form中,在Form上执行revalidate()

frm.revalidate();