×

Discussion Board

Results 1 to 3 of 3
  1. #1
    Registered User
    Join Date
    Jul 2004
    Posts
    5

    Of commandActions and Frustrations! NEed Advice!

    Hi I am extremely new to java and J2ME and need your help.

    I have used the Command.SCREEN action to create an 'edit' soft button on my emulator. What i want to happen is - when i click Edit, i wanna go to another page displaying a list of options eg. add text, add video etc.. how do i do this?

    I have created a similar list page and if i put it as the path when i click edit, it goes to that page but it doesnt work with the edit page that i actually want displayed. I have even tried it with the exact same codes as the other display but still nothing happens when i click edit. i wanted to post the codes i used here but unfortunately they are all on my laptop..

    anyway, hope someone can help.. please..

  2. #2
    Regular Contributor
    Join Date
    Aug 2003
    Location
    uk
    Posts
    232

    some example code

    This is the example code I learned all the basic user interface elements from.

    Code:
    import javax.microedition.lcdui.*;
    import javax.microedition.midlet.*;
    
    
    public class GuiTests extends MIDlet implements CommandListener {
        // display manager
        Display display;
        
        // a menu with items
        // main menu
        List menu;
    
        // list of choices
        List choose;
    
        // textbox
        TextBox input;
    
        // ticker
        Ticker ticker			= new Ticker("Test GUI Components");
    
        // alerts
        final Alert soundAlert	= new Alert("sound Alert");
    
        // date
        DateField date			= new DateField("Today's date: ", DateField.DATE);
    
        // form
        Form form				= new Form("Form for Stuff");
    
        // today's form
        Form today				= new Form("Today's date");
            
        // gauge
        Gauge gauge				= new Gauge("Progress Bar", false, 20, 9);
    
        // text field
        TextField textfield		= new TextField("TextField Label", "abc", 50, 0);
    
        // command
        static final Command backCommand		= new Command("Back", Command.BACK, 0);
        static final Command mainMenuCommand	= new Command("Main", Command.SCREEN, 1);
        static final Command exitCommand		= new Command("Exit", Command.STOP, 2);
        String currentMenu;
    
        // constructor.
        public GuiTests() {}
    
        /**
         * Start the MIDlet by creating a list of
         * items and associating the
         * exit command with it.
         */
        public void startApp() throws MIDletStateChangeException {
            display = Display.getDisplay(this);
            
    		menu = new List("Test Components", Choice.IMPLICIT);
            menu.append("Test TextBox", null);
            menu.append("Test List", null);
            menu.append("Test Alert", null);
            menu.append("Test Date", null);
            menu.append("Test Form", null);
            menu.addCommand(exitCommand);
            menu.setCommandListener(this);
            menu.setTicker(ticker);
            
    		mainMenu();
    
            // form
    		form.append(gauge);
            form.append(textfield);
            
    		// today
            today.append(date);
        }
    
        public void pauseApp() {
            display = null;
            choose = null;
            menu = null;
            ticker = null;
            form = null;
            today = null;
            input = null;
            gauge = null;
            textfield = null;      
        }
    
        public void destroyApp(boolean unconditional) {
            notifyDestroyed();
        }
    
        // main menu
        void mainMenu() {
            display.setCurrent(menu);
            currentMenu = "Main";
        }
    
        /**
         * Test the TextBox component.
         */
        public void testTextBox() {
            input = new TextBox("Enter Some Text:", "", 10, TextField.ANY);
            input.setTicker(new Ticker("Testing TextBox"));
            input.addCommand(backCommand);
            input.setCommandListener(this);
            input.setString("");
            display.setCurrent(input);
            currentMenu = "input";
        }
       
        /**
         * Test the List component.
         */
        public void testList() {
            choose = new List("Choose Items", Choice.MULTIPLE);
            choose.setTicker(new Ticker("Testing List"));
            choose.addCommand(backCommand);
            choose.setCommandListener(this);
            choose.append("Item 1", null);
            choose.append("Item 2", null);
            choose.append("Item 3", null);
            display.setCurrent(choose);
            currentMenu = "list"; 
        }
    
        /**
         * Test the Alert component.
         */
        public void testAlert() 
    	{
            soundAlert.setType(AlertType.ERROR);
            // soundAlert.setTimeout(20);
            soundAlert.setString("** ERROR **");
            display.setCurrent(soundAlert);
        }
    
        /**
         * Test the DateField component.
         */
        public void testDate() {
            java.util.Date now = new java.util.Date();
    
            date.setDate(now);
            today.addCommand(backCommand);
            today.setCommandListener(this);
            display.setCurrent(today);
            currentMenu = "date";
        }
    
        /**
         * Test the Form component.
         */
        public void testForm() {
            form.addCommand(backCommand);
            form.setCommandListener(this);
            display.setCurrent(form);
            currentMenu = "form";
        }
    
        /**
         * Handle events.
         */  
        public void commandAction(Command c, Displayable d) 
    	{
            String label = c.getLabel();
    
            if (label.equals("Exit")) 
    		{
                destroyApp(true);
            } 
    		else if (label.equals("Back")) 
    		{
                if (currentMenu.equals("list") || currentMenu.equals("input")
                        || currentMenu.equals("date") || currentMenu.equals("form")) {
                    // go back to menu
                    mainMenu();
                } 
    
            } 
    		else 
    		{
                List down = (List) display.getCurrent();
    
                switch (down.getSelectedIndex()) {
                case 0:
                    testTextBox();
                    break;
    
                case 1:
                    testList();
                    break;
    
                case 2:
                    testAlert();
                    break;
    
                case 3:
                    testDate();
                    break;
    
                case 4:
                    testForm();
                    break;
                }
                
            }
        }
    }
    Study it well

    Alex

  3. #3
    Registered User
    Join Date
    Jul 2004
    Posts
    3
    G'Day Desperado

    To know which item you select, use the following in your CommandListener method:

    /**
    * command listener
    */
    public void commandAction( Command c, Displayable d ) {

    // check whether the current display is menu
    if( d == menu ) {

    // obtain the chosen menu
    String menuChosen = menu.getString( menu.getSelectedIndex() );

    // check whether the chosen menu is Test TextBox
    if( menuChosen == "Test TextBox" ) {
    testTextBox();
    }
    // if not, check whether the chosen menu is Test List
    else if( menuChosen == "Test List" ) {
    testList();
    }
    // and so forth...
    }
    // if the current display is not main menu then it should be
    // one of those test displays. Let's enable "Back" use case
    else if( c == backCommand ) {
    display.setCurrentDisplay( menu );
    }
    }

    Better still, you could use a bit of an array like this:

    private menuLabels String[] = { "Test TextBox", "Test List" /*, and so forth */ };

    and then in your menu definition:

    menu = new List("Test Components", Choice.IMPLICIT, menuLabels, null );

    which can reduce your commandAction method like below:

    public void commandAction( Command c, Displayable d ) {

    if( d == menu ) {

    switch( menu.getSelectedIndex() ) {

    case 0:
    testTextBox();
    break;

    case 1:
    testList();
    break;

    // and so forth
    }
    }
    else if( c == backCommand ) {
    display.setCurrentDisplay( menu );
    }
    }

    Or even better still, you could create those test methods into separate classes and map the class names using array or hashtable.

    Hope this lighten up your burdens

    Regards,

    Eki

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×