# Wie Menü erstellen und Verknüpfen



## nero82 (13. Jun 2009)

Hallo ich bin neu hier den ich habe neulich auch mal angefangen Java 2me zu programmieren und stehe da vor einem prob. 

Ich würde gern ein auswahl Menü schreiben, wo es mehrere Titel gibt und wenn man eines Anwählt man dann in das entsprechende Untermenü kommt. 

Z.B. 
1. Addressen -- > Name
2. Spiele --> Action --> 
                  Strategie -->
                  Denksport -->

Wisst ihr was ich meine? könnte mir das vielleicht jemand erklären oder hat jemand ein fertigen Quelltext der das Thema behandelt und gibt ihn mir?
Oder vllt kann es mir jemand an folgendem Bsp erklären? 

```
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
 
public class HelloWorldMidlet extends MIDlet implements CommandListener {
 
    public HelloWorldMidlet() {
    }
    private Display display;
    private Form form;
    private StringItem stringItem;
    private Command exitCommand;
 
    public void commandAction(Command command, Displayable displayable) {
        if (displayable == form) {
            if (command == exitCommand) {
                exitMIDlet();
            }
        }
    }
        
    public void startApp() {
        stringItem = new StringItem("Hello", "World");
        form = new Form(null, new Item[] {stringItem});
        exitCommand = new Command("Exit", Command.EXIT, 1);
        form.addCommand(exitCommand);
        form.setCommandListener(this);
        display = Display.getDisplay(this);        
        display.setCurrent(form);

    }

    public void pauseApp() {
    }
  
    public void destroyApp(boolean unconditional) {
    }
 
    public void exitMIDlet() {
        display.setCurrent(null);
        notifyDestroyed();
    }
    
}
```

Ein normales Hello World und ich will zb. das
Hello --> World
Hallo --> Welt
das im hauptmenü Hello und Hallo steht und jedes soll halt bei anwahl in das entsprechende Menü gehen, entweder World oder Welt

MfG und danke im vorraus für eure hilfe.


----------



## Eddiefromscratch (14. Jun 2009)

Hi!

Wenn ich dich richtig verstanden habe:


```
Command cmdHello_EN = new Command("Hello", Command.SCREEN, 0);
Command cmdHello_DE = new Command("Hallo", Command.SCREEN, 0);

Form form = new Form("Hallo Welt!");
Form frmHello_DE = new Form("Hallo");
Form frmHello_EN = new Form("Hello");

frmHello_DE.addCommand(cmdHello_DE);
frmHello_DE.addCommand(cmdHello_EN);

frmHello_EN.addCommand(cmdHello_DE);
frmHello_EN.addCommand(cmdHello_EN);

if (command == cmdHello_EN) {
	display.setCurrent(frmHello_EN);
}

if (command == cmdHello_DE) {
	display.setCurrent(frmHello_DE);
}
```

oder

```
Command cmdHello_EN = new Command("Hello", Command.SCREEN, 0);
Command cmdHello_DE = new Command("Hallo", Command.SCREEN, 0);

Form form = new Form("Hallo Welt!");

if (command == cmdHello_EN) {
	form.removeCommand(cmdHello_EN);
	form.addCommand(cmdHello_DE);
}

if (command == cmdHello_DE) {
	form.removeCommand(cmdHello_DE);
	form.addCommand(cmdHello_EN);
}
```


----------



## nero82 (14. Jun 2009)

Ich weiss nicht ich versuch das mal. zwischen welche zeilen pack ich deinen code in meinen? :bahnhof: 

mfg


----------



## Eddiefromscratch (14. Jun 2009)

Die Ifs gehören in den ActionListener - ich hab hier leider keinen Compiler um den code auch zu testen :-(
Hoffe mal das funktioniert so.

Nochmal zur Erklärung meines ersten Posts:
Die erste Variante erstellt 2 verschiedene Forms die je nach Command angezeigt werden.
Die zweite tauscht einfach das Command aus.


```
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.*;
 
public class HelloWorldMidlet extends MIDlet implements CommandListener {

private Command cmdHello_EN;
private Command cmdHello_DE;

private Form form;

 
    public HelloWorldMidlet() {
    cmdHello_EN = new Command("Hello", Command.SCREEN, 0);
    cmdHello_DE = new Command("Hallo", Command.SCREEN, 0);
    form = new Form("Hallo Welt!");
    }

    private Display display;
    private StringItem stringItem;
    private Command exitCommand;



    public void commandAction(Command command, Displayable displayable) {
        if (displayable == form) {
            if (command == exitCommand) {
                exitMIDlet();
            }
        }
        if (command == cmdHello_EN) {
	        form.removeCommand(cmdHello_EN);
	        form.addCommand(cmdHello_DE);
        }

        if (command == cmdHello_DE) {
	        form.removeCommand(cmdHello_DE);
        	form.addCommand(cmdHello_EN);
        }
    }        

    public void startApp() {
        stringItem = new StringItem("Hello", "World");
        form = new Form(null, new Item[] {stringItem});
        exitCommand = new Command("Exit", Command.EXIT, 1);
        form.addCommand(exitCommand);
        form.setCommandListener(this);
        display = Display.getDisplay(this);        
        display.setCurrent(form);

    }

    public void pauseApp() {
    }
  
    public void destroyApp(boolean unconditional) {
    }
 
    public void exitMIDlet() {
        display.setCurrent(null);
        notifyDestroyed();
    }
   
}
```


----------



## nero82 (14. Jun 2009)

danke ich versuch es und meld mich wie es ausschaut 

mfg


----------



## nero82 (14. Jun 2009)

also das compilieren ging und ich konnte es auch auf handy installieren  

aber leider steht immer noch nur Hello World da ohne unter menüs ^ ^.... 

lad dir doch Sun java wireless toolkit ist free und gut für sowas mfg


----------



## nero82 (14. Jun 2009)

ok auf einem anderen handy geht es halb da habe ich zur auswahl
HellWorldMiDlet---> Hello World
also geht es auch nur so halb ^ ^mfg


----------



## Pappenheimer++ (16. Jun 2009)

Mach solche Menüs lieber mit javax.lcdui.List und ModeChoice.IMPLICIT. Funktioniert auf allen möglichen Geräten tadellos,


----------



## nero82 (16. Jun 2009)

Ohje so gut kenn ich mich dann doch noch nicht mit java aus....:autsch:

mfg


----------



## nero82 (17. Jun 2009)

So ich habe hier mal was zusammen gebaut mit hilfer einer anderen seite 


```
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class CanvasDrawExample extends MIDlet implements CommandListener{
  private Display display;
  private List list;
  private Command ok, exit;
  private CanvasDraw canvasDraw;
  int listItemIndex;

  public CanvasDrawExample(){
    canvasDraw = new CanvasDraw();
    display = Display.getDisplay(this);
    list = new List("Auswahl", List.IMPLICIT);
    ok = new Command("Select", Command.OK, 2);
    exit = new Command("Exit", Command.EXIT, 2);
    list.append("Hello", null);
    list.addCommand(ok);
    list.addCommand(exit);
    list.setCommandListener(this);
  }
  
  public void startApp(){
    display.setCurrent(list);
  }

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

  public void commandAction(Command c, Displayable d){
    listItemIndex = list.getSelectedIndex();
    if(c == ok){
      display.setCurrent(canvasDraw);
    }else if(c == exit){
      destroyApp(true);
    }
  }

  class CanvasDraw extends Canvas implements CommandListener{
    Command back;

    public CanvasDraw(){
      back = new Command("Back", Command.BACK, 1);
      addCommand(back);
      setCommandListener(this);
    }

    public void paint(Graphics g){
int width = getWidth(); 
int height = getHeight();     
      g.setColor(0, 0, 255);
      g.fillRect(0,0, getWidth (), getHeight ());
      g.setColor(255, 0, 0);

      if(listItemIndex == 0){
       g.drawString("World", 0,0, Graphics.TOP | Graphics.LEFT);
}
 }

    public void commandAction (Command c, Displayable d){
      if(c == back){
        display.setCurrent(list);
      }
    }
  }
}
```
so sollte das in etwa aussehen, kann mir vllt noch jemand sagen wir ich das pain(Graphics) und g.drawString durch eine nochmal Text ansicht ersetzen kann.... mfg


----------

