Home > Articles > Programming > Java

  • Print
  • + Share This
From the author of

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.

  • + Share This
  • 🔖 Save To Your Account