- The Basics
- Command Objects
- Creating a Command
- Accessing Commands Through a Soft Button
- Accessing Commands Through a Menu
- Mapping Command to a Specific Soft Button
- Summary
Accessing Commands Through a Menu
Let's write an example that has more commands than the Nokia device can map directly to the display (see Listing 2).
Listing 2: TooManyCommands.java
import javax.microedition.midlet.*; import javax.microedition.lcdui.*; public class TooManyCommands extends MIDlet implements CommandListener { private Display display; // Reference to Display object for this MIDlet private Form fmMain; // The main Form private TextBox tbAction; // Textbox to show when user selects upload/download private Command cmExit; // Command to exit the MIDlet private Command cmBack; // Command to go "back" to the main form private Command cmUload; // Command to "upload" data - no real action done private Command cmDload; // Command to "download" data - no real action done public TooManyCommands() { display = Display.getDisplay(this); cmExit = new Command("Exit", Command.EXIT, 1); cmBack = new Command("Back", Command.BACK, 1); cmUload = new Command("Upload", Command.SCREEN, 2); cmDload = new Command("Download", Command.SCREEN, 3); // Create the Form, add Commands, listen for events fmMain = new Form("Core J2ME"); fmMain.addCommand(cmExit); fmMain.addCommand(cmUload); fmMain.addCommand(cmDload); fmMain.setCommandListener(this); // Create a Textbox, add Command, listen for events tbAction = new TextBox("Process Data", "Upload/download data ", 25, 0); tbAction.addCommand(cmBack); tbAction.setCommandListener(this); } // Called by application manager to start the MIDlet. public void startApp() { display.setCurrent(fmMain); } // A required method public void pauseApp() { } // A required method public void destroyApp(boolean unconditional) { } // Process events public void commandAction(Command c, Displayable s) { if (c == cmExit) { destroyApp(false); notifyDestroyed(); } else if (c == cmUload || c == cmDload) display.setCurrent(tbAction); else if (c == cmBack) display.setCurrent(fmMain); } }
There are two additional commands, cmUload and cmDload. Notice the priorities assigned:
cmUload = new Command("Upload", Command.SCREEN, 2); cmDload = new Command("Download", Command.SCREEN, 3);
By assigning Upload a higher priority than Download, we are stating our preference regarding the relative importance of each command. You'll see the end result of this request in Figure 7, where the Upload command appears before the Download command in the menu.
Figure 7 Commands mapped to both soft buttons and a menu.
In general, when a device cannot display all the commands defined, a menu is created and commands are listed based on their priority.