problem z commandAction

0

Witam,

mam problem z obsługą commandAction, oto mój kod:

import javax.microedition.lcdui.*;


class Element implements CommandListener{
    Form f;
    int nrPytania=1;
    String sfs="pytanie nr " +nrPytania;
    Image[] image=null;
   
    StringItem pyt;
    StringItem odpA;
    StringItem odpB;
    StringItem odpC;
    StringItem odpD;
    StringItem wyg;
    String cor;

    ChoiceGroup wybierz = new ChoiceGroup("Wybierz odpowiedz: ", Choice.EXCLUSIVE, new String[] {"A","B","C","D"},null);
    Command CMD_OK=new Command("OK",Command.OK,3);
    
    public Element(){
        Milionerzy.milionerzyDB(nrPytania);
        
        pyt=new StringItem(MilionerzyDB.pytanie,"",Item.PLAIN);
        odpA=new StringItem("A: ",MilionerzyDB.a,Item.PLAIN);
        odpB=new StringItem("B: ",MilionerzyDB.b,Item.PLAIN);
        odpC=new StringItem("C: ",MilionerzyDB.c,Item.PLAIN);
        odpD=new StringItem("D: ",MilionerzyDB.d,Item.PLAIN);
        wyg=new StringItem("Wygrales!!!","wynik 500",Item.PLAIN);
        cor=MilionerzyDB.correct;

        f=new Form(sfs);
        f.append(pyt);
        f.append(odpA);
        f.append(odpB);
        f.append(odpC);
        f.append(odpD);
        f.append(wybierz);
        f.addCommand(CMD_OK);
        f.setCommandListener(this);
        System.out.println(wybierz.getString(wybierz.getSelectedIndex()));
    }
    public void commandAction(Command c, Displayable d){
           if(c==CMD_OK){
            int index=wybierz.getSelectedIndex();
            switch(index){
                case 0:
                    //dalsze instrukcje
                    System.out.println("Wybrales A");
           }
        }
    }

próbowałem też czegoś takiego:

switch(c.getCommandType()){
            case Command.OK:
                
                System.out.println(wybierz.getString(wybierz.getSelectedIndex()));
                break;
}

w obu przypadkach program nie reaguje na wciśnięcie klawisza ok :/
jeżeli macie jakieś pomysły co jest źle to proszę o pomoc

z góry dziękuje i pozdrawiam

0

U mnie to działa (oczywiście po zastąpieniu odwołań do klasy Milionerzy - wiec może gdzieś w niej leży problem)

0
abe napisał(a)

U mnie to działa (oczywiście po zastąpieniu odwołań do klasy Milionerzy - wiec może gdzieś w niej leży problem)

klasa Milionerzy wygląda tak:

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

public class Milionerzy extends MIDlet implements CommandListener{
    //private final static Command CMD_EXIT=new Command("Wyjscie",Command.EXIT,1);
    private final static Command CMD_BACK=new Command("Wstecz",Command.BACK,2);
    private Displayable display;
    private List list;
    private boolean firstTime;
    private StringItem s;
    private Form f;

    public Milionerzy(){
        String[] stringArray={"Start","Statystyki","Pomoc","Wyjscie"};
        Image[] imageArray=null;

        
        list=new List("MENU: ",List.IMPLICIT,stringArray,imageArray);
        list.setCommandListener(this);

        firstTime=true;
    }
    
    public void pomoc(){
        f=new Form("Pomoc");
        s=new StringItem("","aplikacja zostala napisana jako praca przejsciowa",Item.BUTTON);
        f.append(s);
        f.setCommandListener(this);
        f.addCommand(CMD_BACK);
        setDisplay(f);
    }
    private void setDisplay(Displayable d){
        Display.getDisplay(this).setCurrent(d);
        display=d;
    }

    public void startApp(){
        if(firstTime==true){
            setDisplay(list);
            MilionerzyDB.open();
            MilionerzyDB.writeData();
            MilionerzyDB.close();
            firstTime=false;
        }
    }
    public void pauseApp(){}
    public void destroyApp(boolean unconditional){}
    public static void milionerzyDB(int nrPytania){
        MilionerzyDB.open();
        MilionerzyDB.readData(nrPytania);
        MilionerzyDB.close();
    }

    public void commandAction(Command c, Displayable d){
        if(c==List.SELECT_COMMAND){
            switch(((List)d).getSelectedIndex()){
                case 0:
                    //glowna plansza
                    /*Plansza p=new Plansza();
                    setDisplay(p);
                    p.setCommandListener(this);
                    p.addCommand(CMD_BACK);
                    
                    MilionerzyDB db=new MilionerzyDB();
                    setDisplay(db.enumList);
                    db.g.setCommandListener(this);
                    db.g.addCommand(CMD_BACK);
                     */
                    MilionerzyDB db=new MilionerzyDB();
                    break;
                case 1:
                    //statystyki
                    Element el=new Element();
                    setDisplay(el.f);
                    el.f.setCommandListener(this);
                    el.f.addCommand(CMD_BACK);
                    break;

                case 2:
                    //pomoc
                    pomoc();
                    break;

                case 3:
                    //wyjscie
                    destroyApp(true);
                    notifyDestroyed();
                    MilionerzyDB.close();
            }
        }
        if(c==CMD_BACK){
            setDisplay(list);
        }
    }
     
}

jeżeli widzisz jakiś błąd to daj znać ;)
ps sorry za ten bałagan w kodzie :D

pzdr

0
case 1:
//statystyki
Element el=new Element();
setDisplay(el.f);
el.f.setCommandListener(this); //TUTAJ!
//...
0

działa :D
wielkie dzięki za pomoc [browar]
temat do zamknięcia

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