Java ME Attribut(werte) von MIDlet übergeben

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.
 

Inse60

Mitglied
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
 
G

Gerhard

Gast
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 ;)
 
G

Gerhard

Gast
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.
 

Inse60

Mitglied
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
 

Inse60

Mitglied
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:
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Android ListView, Werte aktualisieren ohne die Liste komplett neu zu laden Android & Cross-Platform Mobile Apps 5
S Android ListFragment & ArrayAdapter - Button-Werte werden vergessen Android & Cross-Platform Mobile Apps 0
T x und y Werte richtig festlegen Android & Cross-Platform Mobile Apps 4
X Wie kriege ich die RGB Werte von Bildern? ->getRGB()? Android & Cross-Platform Mobile Apps 6
F MIDLET Pascal statt J2ME? Android & Cross-Platform Mobile Apps 6
A Midlet mit TableModel Android & Cross-Platform Mobile Apps 2
M Eclipse: cdc.jar in eine Midlet Suite integrieren Android & Cross-Platform Mobile Apps 18
N Midlet mit JDK 1.5 Android & Cross-Platform Mobile Apps 2
S DTMF-Töne über MIDlet senden Android & Cross-Platform Mobile Apps 3
A Midlet bei Fehler elegant beenden mit Fehlermeldung Android & Cross-Platform Mobile Apps 4
A Midlet Tutorial Android & Cross-Platform Mobile Apps 1
Kidao Wie schließt man ein Midlet über Tasten? Android & Cross-Platform Mobile Apps 3
G Thread und Midlet Android & Cross-Platform Mobile Apps 1
B RFCOMM über serielle Schnittstelle RS 232 MIDLET Android & Cross-Platform Mobile Apps 1
N Midlet & Com Port Android & Cross-Platform Mobile Apps 2
L Midlet 1.0/2.0 unterstützung? Android & Cross-Platform Mobile Apps 5
J MIDlet installieren - Telefon stürzt ab! Android & Cross-Platform Mobile Apps 3
G Fragen zur Midlet Signierung Android & Cross-Platform Mobile Apps 2
M MIDlet + Datum in String Android & Cross-Platform Mobile Apps 5
C maximale midlet-grösse Android & Cross-Platform Mobile Apps 2
B eigenes Midlet auf 6230i ? Prog ungültig ! Android & Cross-Platform Mobile Apps 4
M Java Midlet -> in einem ChoiceGroup ein TextField zur Wah Android & Cross-Platform Mobile Apps 2
B Fehler bei Midlet installation? "Aktion Abgebrochen&quo Android & Cross-Platform Mobile Apps 10
B Java-anwendung in Midlet umschreiben, aber wie?1? Android & Cross-Platform Mobile Apps 2

Ähnliche Java Themen

Neue Themen


Oben