динамическое создание кнопки в форме с помощью lwuit 1.4 - PullRequest
1 голос
/ 27 июля 2011
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.");
}

Я использую приведенный выше код для создания динамического Button с использованием json.я могу получить значение в консоли, но не могу получить Button в Form

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Это явно неправильное использование конечного автомата (который не является частью 1.4 BTW), так как базовый класс будет создавать и показывать форму самостоятельно и устанавливать свою собственную тему (переопределяя все, что вы делали раньше).

Вы также забыли включить создание / определение con1 и включили вызовы на UnsupportedOperationException, которые не будут выполняться на устройстве.

Весь ваш код LWUIT должен быть в конечном аппарате, пожалуйста, следуйте демонстрациям, включая демонстрацию t-zone, где мы заменяем заголовок на лету, чтобы создать анимацию. Весь этот код полностью находится в конечном автомате, где мы переопределяем определенные методы инициализации формы и изменяем форму оттуда.

Если вы хотите написать все вручную, не используйте конечный автомат, просто используйте UIBuilder напрямую.

0 голосов
/ 31 июля 2011

Я думаю, что после создания кнопок вы можете добавить их в форму даже после показа, чтобы выполнить revalidate () в форме

frm.revalidate();
...