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
答案 0 :(得分:1)
显然不正确使用状态机(不是1.4 BTW的一部分),因为基类将自己创建并显示一个表单并设置自己的主题(覆盖之前所做的任何事情)。
您还忽略了con1
的创建/定义,并包含了不会在设备上运行的UnsupportedOperationException
调用。
你所有的LWUIT代码都应该在状态机中,请按照包括t-zone演示的演示,我们在那里动态替换标题来创建动画。所有这些代码完全在状态机中,我们覆盖特定的表单初始化方法并从那里修改表单。
如果您想手动编写所有内容,请不要使用状态机,只需直接使用UIBuilder即可。
答案 1 :(得分:0)
我认为你应该在构建你的Buttons之后,你仍然可以在show之后将它们添加到Form中,在Form上执行revalidate()
frm.revalidate();