problem z pojawianiem się tekstu w TextField

0

Witam,
Chce napisać program do zamiany jednostek w Javie (program na telefon) i chce zrobić to w taki sposób, ażeby w momencie gdy w jednym polu tekstowym pisze się liczby w drugim Od razu one się zmieniają. Jednak po napisaniu kodu mam ciągle problem, ponieważ mam błąd, że jest pusty łańcuch.
Oto fragment kodu który stworzyłem i w którym ma sie odbywać zamiana:

powierzchniaForm = new Form("Powierzchnia");
n1=new TextField ("Metry",null,12,TextField.DECIMAL);
powierzchniaForm.append(n1);
double metry;
metry = Double.parseDouble(n1.getString());
double centymetry = metry;
n2=new TextField ("Centymetry"+centymetry,null,12,TextField.DECIMAL);
powierzchniaForm.append(n2);
powierzchniaForm.addCommand(oKCommand);
powierzchniaForm.setCommandListener(this);

Będę bardzo wdzięczny za szybką pomoc.

0

a i jeszcze bląd ktory mi się pojawia:
Unable to create MIDlet MenuLista
java.lang.NumberFormatException: empty String
at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:984)
at java.lang.Double.parseDouble(+4)
at MenuLista.<init>(MenuLista.java:66)
at java.lang.Class.runCustomCode(+0)
at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
at com.sun.midp.midlet.Selector.run(Selector.java:150)

0

Ta instrukcja:

metry = Double.parseDouble(n1.getString());
powinna być wywoływana w konsekwencji zmiany zawartości pola, a nie podczas inicjalizacji programu. Powinineś zastosować coś takiego:

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

public class Main extends MIDlet implements ItemStateListener {

  private Form       form;
  private Display    ekran;
  private TextField  n1;
  private TextField  n2;

  public Main() {
    form = new Form("Metry - Centymetry");
    ekran = Display.getDisplay(this);
    ekran.setCurrent(form);
    n1 = new TextField("Metry:", null, 12, TextField.DECIMAL);
    n2 = new TextField("Centymetry:", null, 14, TextField.DECIMAL);
    form.append(n1);
    form.append(n2);
    form.setItemStateListener(this);
  }
  public void itemStateChanged(Item item) {
    if (item == n1) {
      if (n1.getString().length() > 0) {
        double metry = Double.parseDouble(n1.getString());
        double centymetry = metry*100;
        n2.setString(centymetry+"");
      } else {
        n2.setString("");
      }
    }
    if (item == n2) {
      if (n2.getString().length() > 0) {
        double centymetry = Double.parseDouble(n2.getString());
        double metry = centymetry/100;
        n1.setString(metry+"");
      } else {
        n1.setString("");
      }
    }
  }
  public void startApp() {}
  public void pauseApp() {}
  public void destroyApp(boolean unconditional) {}
}

Jak widzisz, zamiast CommandListenera trzeba użyć ItemStateListenera. Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1