Java ME Attribut(werte) von MIDlet übergeben

  • Themenstarter Themenstarter Gerhard
  • Beginndatum Beginndatum
G

Gerhard

Gast
Hallo Leuts,
kann mir jemand sagen wie ich von einem MIDlet die Attributwerte an z.B. eine Canvas oder Custom Item Klasse weitergeben kann?
Vielen Dank schonmal im vorraus.
 
Hallo Gerhard,

so wie sonst auch. Ohne genau zu wissen was du vor hast:
- die Werte im Konstruktor einzeln übergeben
- einen Zeiger auf dein MIDlet im Konstruktor übergeben
- du erzeugst eine Instanz der Klasse und setzt dann deren Variablen direkt oder über Methoden
- über Listener

Falls ich nicht das richtige getroffen habe frage doch bitte noch einmal mit mehr Informationen zu deinem Vorhaben nach.

Grüße Martin
 
ja stimmt das funktioniert auch, ich habe mich gestern nur über eine Null Pointer Exception gewundert, die kam allerdings daher, dass ich die Variablen in einem Texfeld neu gesetzt habe. Das würde ich gerne mal wissen wie ich das richtig mache 😉
 
Naja dann mach ich mal ein Beispiel:
Ich habe einen REchner die die Variablen a und b multipliziert. Diese kommen aus 2 Texfeldern. Variable b steht mal hier:
Java:
public TextField getTextField1 () {
if (textField1 == null) {                                   
textField9 = new TextField ("gib A an", "0.00", 32, TextField.DECIMAL); 
                                    
double a=Double.parseDouble(textField1.getString());
}                          
return textField1;
}
Dann soll das multipliziert werden.
Java:
public TextField getTextField2 () {
if (textField2 == null) {                                 
textField2 = new TextField ("Ergebnis Rechnung", null, 32, TextField.ANY);     
                              
textField2.setString(Double.toString(a*b));
}                          
return textField2;
}
Aber irgendwie funktioniert das nicht mit dem setzen der Variable A.
 
Hallo Gerhard,

dein Beispiel erschließt sich mir nicht.

In der ersten Funktion erzeugst du eine lokale Variable "a" und benutzt sie dann nicht weiter.
in der zweiten Funktion rechnest du mit Variablen die global oder gar nicht erzeugt wurden.
Was machst du mit den TextField-Objekten die die Funktionen erzeugen und zurückgeben?

Ich würde das so lösen:
Java:
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;

public class Test extends MIDlet implements CommandListener{

  Display display;
  Form formular;

  TextField varA = new TextField ("gib A an", "0.00", 32, TextField.DECIMAL);
  TextField varB = new TextField ("gib B an", "0.00", 32, TextField.DECIMAL);
  TextField varC = new TextField ("Ergebnis", null, 32, TextField.ANY);

  public Test (){
    formular = new Form("Testformular");
    formular.append(varA);
    formular.append(varB);
    formular.append(varC);
    formular.addCommand(new Command("Beenden", Command.EXIT, 1));
    formular.addCommand(new Command("Berechnen", Command.OK, 1));
    formular.setCommandListener(this);
  }

  public void startApp(){
    display = Display.getDisplay(this);
    display.setCurrent(formular);
  }
  
  public void pauseApp(){

  }
  
  public void destroyApp(boolean option){

  }

  public void commandAction(Command c, Displayable d){
    if(c.getLabel().equals("Beenden"))
      notifyDestroyed();
    else if(c.getLabel().equals("Berechnen")){
      varC.setString(berechnen(varA.getString(), varB.getString()));
    }
  }
  
  private String berechnen(String stringA, String stringB){
    double d = Double.parseDouble(stringA) * Double.parseDouble(stringB);
    return Double.toString(d);
  }
}
Im Anfangspost fragst du wie man Attribute an Klassen weitergibt. Hat das hiermit estwas zu tun?

Martin
 
So nun noch ein Beispiel mit Parameterübergabe.

Das Midlet:
Java:
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.midlet.MIDlet;

public class Test extends MIDlet{

  Display display;
  MeinFormular formular;
  MeineZeichenebene zeichnen = null;

  public Test(){
    formular = new MeinFormular("Testformular", new Handler(), 1.5, 3.25);
  }

  public void startApp(){
    display = Display.getDisplay(this);
    display.setCurrent(formular);
  }
  
  public void pauseApp(){

  }
  
  public void destroyApp(boolean option){

  }

  class Handler implements CommandListener{
    public void commandAction(Command c, Displayable d){
      if(c.getLabel().equals("Beenden"))
        notifyDestroyed();
      else if(c.getLabel().equals("Berechnen")){
        formular.setErgebnis(berechnen(formular.getA(), formular.getB()));
      }else if(c.getLabel().equals("zurueck"))
        display.setCurrent(formular);
      else if(c.getLabel().equals("zeichnen")){
        if(zeichnen == null)
          zeichnen = new MeineZeichenebene(new Handler());
        display.setCurrent(zeichnen);
      }
    }
  }
  
  private double berechnen(double a, double b){
    return a * b;
  }
}
Das Formular:
Java:
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;

public class MeinFormular extends Form{
  
  TextField varA = new TextField ("gib A an", null, 32, TextField.DECIMAL);
  TextField varB = new TextField ("gib B an", null, 32, TextField.DECIMAL);
  TextField varC = new TextField ("Ergebnis", null, 32, TextField.ANY);

  public MeinFormular(String titel, CommandListener l, double a, double b){
    super(titel);
    append(varA);
    append(varB);
    append(varC);
    addCommand(new Command("Beenden", Command.EXIT, 1));
    addCommand(new Command("Berechnen", Command.ITEM, 1));
    addCommand(new Command("zeichnen", Command.ITEM, 2));
    setCommandListener(l);
    varA.setString(Double.toString(a));
    varB.setString(Double.toString(b));
  }
  
  public double getA(){
    return Double.parseDouble(varA.getString());
  }
  
  public double getB(){
    return Double.parseDouble(varB.getString());
  }
  
  public void setErgebnis(double d){
    varC.setString(Double.toString(d));
  }
}
Und die Zeichenebene:
Java:
import javax.microedition.lcdui.*;

public class MeineZeichenebene extends Canvas{
  
  public MeineZeichenebene(CommandListener l){
    addCommand(new Command("zurueck", Command.BACK, 1));
    setCommandListener(l);    
  }
  
  public void paint(Graphics g){
    g.setColor(0);
    g.fillRect(0, 0, getWidth() - 1, getHeight() - 1);
    g.setColor(0xffffff);
    String s1 = "Hier könnte man";
    String s2 = "etwas zeichnen.";
    int w = Font.getDefaultFont().stringWidth(s1);
    int x = (getWidth() - w) / 2;
    g.drawString(s1, x, 50, Graphics.LEFT | Graphics.TOP);
    g.drawString(s2, getWidth() / 2, 80, Graphics.HCENTER | Graphics.TOP);
  } 
}

Den Handler im Midlet erzeuge ich zwei mal. Das wäre nicht nötig.

Grüße Martin
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben