LWUIT:需要帮助`Back`命令无法正常工作

时间:2011-12-13 08:03:54

标签: java-me lwuit

我们使用表格显示 SPLASH 屏幕,其中包含 MENU 表格,其中包含许多按钮,如关于我们,登录,反馈等。 现在我转到LOGIN表单,其中包含menuback命令。我的问题是,在此表单中单击back命令时,它会转到SPLASH屏幕。

预期的行为是LOGIN表单中的后退命令必须返回MENU表单而不是SPLASH表单。

怎么做?

Splash.java

public class Splash extends MIDlet implements ActionListener {
    Image img_Splash;
    Form frm_Main;
    String str_URL;
    int Width, Height;
    Label lbl_Splash;
    Command cmd_Cancel;

    public void startApp() {
        Display.init(this);

        frm_Main = new Form();
        try {
            //Resources theme = Resources.open("/44444.res");
            img_Splash = Image.createImage("/res/splash.png");
            Resources theme = Resources.open("/666666.res");
            UIManager.getInstance().setThemeProps(
                    theme.getTheme(theme.getThemeResourceNames()[0]));
        } catch (IOException io) {
            io.printStackTrace();
            Dialog.show("Theme Exception", io.getMessage(), "Ok", null);
        }


        lbl_Splash = new Label(img_Splash);
        lbl_Splash.getStyle().setBgColor(16777215);

        frm_Main.addComponent(lbl_Splash);
        frm_Main.setScrollable(true);

        cmd_Cancel = new Command("Cancel");
        frm_Main.addCommand(cmd_Cancel);
        frm_Main.addCommandListener(this);

        frm_Main.show();

        // th
        Thread splashThread = new Thread() {

            public void run() {
                try {
                    sleep(5000);
                } catch (InterruptedException ex) {
                    ex.printStackTrace();

                } finally {
                    MainMenu mainmenu = new MainMenu(frm_Main);
                    mainmenu.show();
                }
            }
        };
        splashThread.start();
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
        //notifyDestroyed();
    }

    public void actionPerformed(ActionEvent ae) {
        Command con = ae.getCommand();
        String str_CmdName = con.getCommandName();

        if (str_CmdName.equals("Cancel")) {
            notifyDestroyed();
        }
    }
}

Mainmenu.java

class MainMenu extends Form implements ActionListener {

    Form frm_Main;
    //MainMidlet main;
    public Button btn_main_Login, btn_main_NewUser, btn_main_Help;
    public Label lbl_main_Login, lbl_main_NewUser, lbl_main_Help;

    public Image img_main_Login, img_main_NewUser, img_main_Help;
    public Command cmd_Exit, cmd_Select;

    public MainMenu(Form form) {
        this.frm_Main = form;
        try {
            img_main_Login = Image.createImage("/res/btn_main_login.png");
            img_main_NewUser = Image.createImage("/res/btn_main_newuser.png");
            img_main_Help = Image.createImage("/res/btn_main_help.png");
        } catch (IOException io) {
            io.printStackTrace();
            //Dialog.show("Image not Found!", io.getMessage(), "Ok", null);
            System.out.println("Image not found" + io.getMessage());
        }


        //---------   Whole form define as BorderLayout with three Container.
        BorderLayout bor_MainMenuLayout = new BorderLayout();
        setLayout(bor_MainMenuLayout);
        setScrollable(false);

        //----------- Define Container for Header On North
        Container con_Header = new Container();
        lbl_Header = new Label(img_Header);
        con_Header.addComponent(lbl_Header);


        //----------- Define Container as GridLayout and place
        //----------- on BorderLayout Center position
        //---------     Define Container(CENTER) for search details
        //---------     with BoxLayout
        BoxLayout bx_CenterLayout = new BoxLayout(BoxLayout.Y_AXIS);
        Container con_Center = new Container(bx_CenterLayout);
        con_Center.setScrollableY(true);
        con_Center.getStyle().setPadding(0, 10, 3, 3);

        //---------     FlowLayout for Header Details
        FlowLayout flw_MenuHdr = new FlowLayout();
        Container con_HdrDetails = new Container(flw_MenuHdr);
        lbl_MenuHdr = new Label("Menu");
        lbl_MenuHdr.getStyle().setBgTransparency(0);
        lbl_MenuHdr.getStyle().setPadding(0, 5, 10, 0);

        con_HdrDetails.addComponent(lbl_MenuHdr);

        con_Center.addComponent(con_HdrDetails);

        //----------        GridLayout define 1 rows and 3 coloumn
        //----------        First row
        GridLayout grd_Row1Layout = new GridLayout(1, 3);
        Container con_Row1Layout = new Container(grd_Row1Layout);

        btn_main_Login = new Button(img_main_Login);
        btn_main_Help = new Button(img_main_Help;
        btn_main_NewUser = new Button(img_main_NewUser);

        con_Row1Layout.addComponent(btn_main_Login);
        con_Row1Layout.addComponent(btn_main_Help);
        con_Row1Layout.addComponent(btn_main_NewUser);

        con_Center.addComponent(con_Row1Layout);



        //-----------   Add Command on softkey 
        cmd_Exit = new Command("Exit");
        cmd_Select = new Command("Select");

        addCommand(cmd_Select);
        addCommand(cmd_Exit);
        addCommandListener(this);

        addComponent(BorderLayout.NORTH, con_Header);
        addComponent(BorderLayout.CENTER, con_Center);

        //this.getStyle().setBgColor(12105912);
        frm_Main.getStyle().setBgColor(12105912);

    }

    public void actionPerformed(ActionEvent ae) {
        Command cmd = ae.getCommand();
        String str_CmdName = cmd.getCommandName();

        //-----------       When Click on Exit Button
        if (str_CmdName.equals("Exit")) {
            //System.exit(0);
            //frm_Main.notifyAll();
        }

        //-----------       When Click on Select Button
        if (str_CmdName.equals("Select")) {
            //-----------       When Click on Login
            if (btn_main_Login.hasFocus()) {
                String str_MemberId = GlobalClass.getInstance().getMemberId();

                if (!(str_MemberId == "" || str_MemberId == null)) {
                    SearchDiamond searchdiamond = new SearchDiamond(frm_Main);
                    searchdiamond.setTransitionInAnimator(
                            Transition3D.createRotation(800, true));
                    searchdiamond.show();
                } else {
                    Login login = new Login(frm_Main);
                    login.setTransitionInAnimator(
                            Transition3D.createRotation(800, true));
                    login.show();
                }

            }

            //-----------       When Click on New User
            if (btn_main_NewUser.hasFocus()) {
                //Dialog.show("New User", "NewUser", "Ok", null);
                NewUser newuser = new NewUser(frm_Main);
                //newuser.setTransitionInAnimator(
                        CommonTransitions.createFade(1500));
                newuser.setTransitionInAnimator(
                        Transition3D.createRotation(800, true));
                newuser.show();

            }

            //-----------       When Click on Help
            if (btn_main_Help.hasFocus()) {
                Help help = new Help(frm_Main);
                help.setTransitionInAnimator(
                        Transition3D.createRotation(800, true));
                help.show();
            }

            //-----------       When Click on Exit
            if (btn_main_Exit.hasFocus()) {
                System.exit(0);
            }

        }
    }
}

Login.java

class Login extends Form implements ActionListener {

    Form frm_Main;
    Label lbl_Header, lbl_Footer, lbl_SepLine, lbl_HdrAlreadyMember, lbl_UserID, lbl_PWD,
            lbl_Blank2, lbl_Blank3, lbl_HdrNewMember, lbl_Info;
    TextField txtf_UserID, txtf_PWD;
    Button btn_Login;
    Command cmd_Back, cmd_AboutUs, cmd_Privacy;

    public Login(Form form) {
        this.frm_Main = form;

        //---------   Whole form define as BorderLayout with three Container.
        BorderLayout bor_LoginLayout = new BorderLayout();
        setLayout(bor_LoginLayout);
        setScrollable(false);

        //---------   Define Container(NORTH) for Header.
        Container con_Header = new Container();
        lbl_Header = new Label();
        con_Header.addComponent(lbl_Header);


        //---------     Define Container(CENTER) for search details 
        //---------     with BoxLayout
        BoxLayout bx_CenterLayout = new BoxLayout(BoxLayout.Y_AXIS);
        Container con_Center = new Container(bx_CenterLayout);
        con_Center.setScrollableY(true);
        con_Center.getStyle().setMargin(5, 5, 0, 0);

        //---------     FlowLayout for Header Details
        FlowLayout flw_HdrLayout = new FlowLayout();
        Container con_HdrDetails = new Container(flw_HdrLayout);

        lbl_HdrAlreadyMember = new Label("Already a Member?");
        lbl_HdrAlreadyMember.setAlignment(Component.LEFT);
        con_HdrDetails.addComponent(lbl_HdrAlreadyMember);

        con_Center.addComponent(con_HdrDetails);

        //---------     BoxLayout for Login details
        BoxLayout bx_Login1Layout = new BoxLayout(BoxLayout.Y_AXIS);
        Container con_Login1Details = new Container(bx_Login1Layout);
        con_Login1Details.setScrollableY(true);


        lbl_UserID = new Label("User Name:");


            txtf_UserID = new TextField("");
        txtf_UserID.setFocusable(true);
        txtf_UserID.setFocus(true);
        txtf_UserID.setConstraint(TextField.ANY);
        txtf_UserID.setInputMode("abc");

        lbl_PWD = new Label("Password:");

        txtf_PWD = new TextField("");
        txtf_PWD.setConstraint(TextField.PASSWORD);


        con_Login1Details.addComponent(lbl_UserID);
        con_Login1Details.addComponent(txtf_UserID);
        con_Login1Details.addComponent(lbl_PWD);
        con_Login1Details.addComponent(txtf_PWD);

        //---------     BoxLayout for Login Button
        FlowLayout flw_LoginBtnLayout = new FlowLayout(CENTER);
        Container con_LoginBtnDetails = new Container(
                flw_LoginBtnLayout);
        con_LoginBtnDetails.setScrollableY(true);

        btn_Login = new Button("Login");
        btn_Login.setPreferredSize(new Dimension(80, 25));
        btn_Login.setAlignment(Component.CENTER);

        con_LoginBtnDetails.addComponent(btn_Login);

        con_Login1Details.addComponent(con_LoginBtnDetails);

        con_Center.addComponent(con_Login1Details);

        //---------     BoxLayout for other Login details
        BoxLayout bx_Login2Layout = new BoxLayout(BoxLayout.Y_AXIS);
        Container con_Login2Details = new Container(bx_Login2Layout);
        con_Login2Details.setScrollableY(true);
        con_Login2Details.getStyle().setMargin(5, 5, 10, 10);

        //---------     Login type 3 New Remember Me
        chk_RememberMe = new CheckBox("Remember Me");
        chk_RememberMe.setTickerEnabled(false);
        con_Login2Details.addComponent(chk_RememberMe);

        //---------     Login type 3 New Forgot Password
        btn_ForgotPWD = new Button("Forgot Password?");
        btn_ForgotPWD.setTickerEnabled(false);
        btn_ForgotPWD.setAlignment(Component.LEFT);
        btn_ForgotPWD.setTextPosition(Component.RIGHT);

        con_Login2Details.addComponent(btn_ForgotPWD);

        con_Center.addComponent(con_Login2Details);
        con_Center.getStyle().setPadding(0, 0, 10, 10);

        addComponent(BorderLayout.NORTH, con_Header);
        addComponent(BorderLayout.CENTER, con_Center);

        cmd_Back = new Command("Back");
        this.setBackCommand(cmd_Back);
        addCommand(cmd_Back);
        addCommandListener(this);


        //----------  Add More Command for Menu item
        cmd_AboutUs = new Command("About Us");
        cmd_Privacy = new Command("Privacy");

        addCommand(cmd_AboutUs);
        addCommand(cmd_Privacy);

        //-------       When Login Button is Clicked
        btn_Login.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent evt) {
                     ....
            }
        });
    }
    public void actionPerformed(ActionEvent ae) {
        Command con = ae.getCommand();
        String str_CmdName = con.getCommandName();
        if (str_CmdName.equals("Back")) {
            // here back code 
            frm_Main.setTransitionInAnimator(
                        Transition3D.createRotation(800, true));
            frm_Main.showBack();
        }

        ....
        if (str_CmdName.equals("About Us")) {
            AboutUs aboutus = new AboutUs(frm_Main);
            aboutus.show();
        }

        if (str_CmdName.equals("Privacy")) {
            Privacy privacy = new Privacy(frm_Main);
            privacy.show();
        }

    }
}

编辑:添加了表单的源代码

1 个答案:

答案 0 :(得分:2)

知道了!

MainMenu(...)构造函数中,您将SPLASH屏幕的引用存储在类变量frm_Main中,此类变量将传递给Login(...)中的MainMenu.actionPerformed(...)构造函数1}}如此有效地传递Splash表单对象的引用。您需要将MainMenu's引用的当前类传递给Login(...)构造函数而不是MainMenu.frm_Main

如果您不希望从Splash屏幕返回MainMenu屏幕,请执行此操作:

public MainMenu(Form form)
{
    this.frm_Main = this;  //by referring to `MainMenu.this` and not input 
                           //parameter `form` which is referring to Splash
                           //object

    ...

如果您想维护MainMenu屏幕的后向参考,请在MainMenu.actionPerformed(...)

中保持此操作
Login login = new Login(/*global variable for `MainMenu.this`*/);