J2ME doppio menu' (in liste implicite)

  • Creatore Discussione Creatore Discussione hertion
  • Data di inizio Data di inizio

hertion

Nuovo Utente
30 Gen 2010
7
0
0
Raga ciao a tutti.... sono nuovo nel foro... se ho sbagliato sezione chiedo infinitamente perdono ai mod xD 0:)0:)0:)

vi volevo domandare una cosa.... (nn mi pigliate per il sedere k non conosco java etc pliz... )
mi sono avvicinato al mondo della programmazione da pochissimo.... ho tentato di fare questa applicazione che dovrebbe presentare questa struttura :

------------------ =>scelta1 =>immagine
--------=>scelta1 =>scelta2 =>immagine
------------------=>scelta3 =>immagine

------------------=>scelta1 =>immagine
MENU:--=>scelta2 =>scelta2 =>immagine
------------------=>scelta3 =>immagine

------------------=>scelta1 =>immagine
--------=>scelta3 =>scelta2 =>immagine
------------------=>scelta3 =>immagine



il source l'ho postato su megaupload in quanto sono 2 class... se volete lo posto qui in uno spoiler....

LINK : http://www.megaupload.com/?d=AAZ16F77 :crying::crying::crying::crying:
 
Grz

Ciao alessandro.... in teoria il codice dovrebbe essere corretto... (almeno nella compilazione non mi da errori...)

il problema sta nella seconda lista implicita.... non me la apre infatti...

(io utilizzo Java(TM) ME Platform SDK 3.0) e quando faccio play cn l'emulatore touch clicco su matematica k dovrebbe portare al secondo menu e ivece si kiude l'appl....


p.s. mediafire link : http://www.mediafire.com/?nyyjoigzijq
 
Potresti postare il codice perchè non posso accedere a server di upload\download da questa postazione.

Grazie
CIro
 
Ciao certamente... allora


questo è l' " HelloMIDlet.java "
package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.OutputConnection;
import javax.microedition.io.Connector;
import javax.microedition.io.ConnectionNotFoundException;
import java.io.InputStream;
import hello.*;


public class HelloMIDlet extends MIDlet implements CommandListener {

private Command exitCommand; // The exit command
private Display display; // The display for this MIDlet
private List a; // lista di scelta 1 (matematica, geometria e geometrai analitica)
private Command Back;
public List x;
// The display for this MIDlet

public HelloMIDlet() {
display = Display.getDisplay(this);
exitCommand = new Command("Exit", Command.EXIT, 0);
Back = new Command("Indietro", Command.BACK, 1); // back command



}


public void startApp() {

a = new List ("Formulario by hertion", List.IMPLICIT);
a.append(" Matematica", null);// lista implicita
a.append(" Geometria", null);
a.append(" Geometria analitica", null);
a.append(" Fisica ", null);
a.addCommand(exitCommand);
a.setCommandListener(this);// mette in ascolto per evenuali comandi

display.setCurrent(a);// setta come predefinito sul display la lista



}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
else if (c == Back){
display.setCurrent(a);
}
else if (c==List.SELECT_COMMAND)
{
//Recupero l'indice dell'elemento selezionato
int index = a.getSelectedIndex();
if(index == 0) {
x= matematica.b;
display.setCurrent(x);
}
}




}

}



/* Questo va messo in un nuovo class.... form= new Form("Numeri primi:");

form.append(" FORMULARIO BY HERTION");
form.append(img);
form.addCommand(Back);
form.setCommandListener(this);

try {
img = Image.createImage("/hello/Numeri_primi.PNG");// Ricerca e creazione immagine
} catch (Exception e) {
System.out.println("L'immagine non puo' essere visualizzata!");
// si è generata un'eccezione
// per esempio il file "/img01.png"
// potrebbe non esistere
}
}
form.addCommand(exitCommand);

form.setCommandListener(this);
*/






e questo il " matematica.java "

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.OutputConnection;
import javax.microedition.io.Connector;
import javax.microedition.io.ConnectionNotFoundException;
import java.io.InputStream;
/**
*
* @author Hertion
*/
public class matematica extends MIDlet implements CommandListener {

public static List b;
public static Command Back;
public static Display display;

public matematica()

{

Back= new Command("Indietro", Command.BACK, 1); // back command

}



public void startApp() {
b = new List ("Matematica", List.IMPLICIT);

b.append("Aritmetica", null);
b.append("Algebra", null);
b.append("Geometria del piano", null);
b.append("Geometria dello spazio", null);
b.append("solidi rotondi ", null);
b.append("Geometria analitica", null);
b.append("Trigonometria", null);
b.append("Analisi", null);
b.append("Utilità", null);


b.addCommand(Back);
b.setCommandListener(this);
}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}


public void commandAction(Command c, Displayable d) {

}



}


p.s. L'ho allegato anke qui..... l'ho addato a un rar ma siccome qui accetta solo zip l'ho rinominato manualmente... se nn ve lo apre basta aprirlo cn winrar xDxD

GRAZIE 1000.....
 

Allegati

Ciao Hertion, ho dato un'occhiata al codice. In una applicazione Java ME
bisogna creare una sola classe che estende MIDLet e come dire un solo main. La classe matematica non dovrebbe estendere MIDLet (forse e meglio Form). Poi dunque se utilizzi un oggetto statico come in questo caso 'matematica.b' risulta 'null' secondo la tua chiamata poichè carichi i valori nel costruttore della classe ed in questo caso accedendo al membro statico il costruttore non viene richiamato. Comunque io ti consiglio di provare a fare in questo modo o lameno riflettere su questo :):
1) Nella classe matematica non estendere MIDLet
2) quando dichiari List utlizza questo codice:
Codice:
public static List b;
static {
  a = new List ("Formulario by hertion", List.IMPLICIT);
  a.append(" Matematica", null);// lista implicita
  a.append(" Geometria", null);
  a.append(" Geometria analitica", null);
  a.append(" Fisica ", null);
}
da inserire tra il corpo della classe fuori dal costruttore.

Comunque e alquanto confuso il codice :confused:. Se vuoi la lista caricata in un'altra finestra forse ti conviene definire un'altro Form dove inserisci la lista.

Facci sapere
 
xD

lo so k è confuso...:crying::crying: lol xD l'ho creato partendo da 0 e non sapendo programmare ancora decentemene in java0:)0:)0:) xD cmq si l'idea era di aprire una nuova finestra....0:):D:love: tu cosa mi consiglieresti di fare? :confused::confused:
 
ok....

ok allora... ho tentato cosi'... l'applet funziona ma mi rimane un problema in questo modo.... :


Matematica.java :



/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package hello;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.List;

/**
*
* @author Hertion
*/
public class Matematica implements CommandListener {

public Command Back;
public static List b;
public Image img;
public Form form;




static {
b = new List ("Formulario by hertion", List.IMPLICIT);
b.append(" Aritmetica ", null);// lista implicita
b.append(" Algebra ", null);
b.append(" Geometria del piano ", null);
b.append(" Geometria dello spazio ", null);
b.append(" Geometria dello spazio ", null);
b.append(" Geometria analitica ", null);
b.append(" Trigonometria ", null);
b.append(" Analisi ", null);
b.append(" Utilità ", null);

b.setCommandListener(null);

}

public void commandAction(Command c, Displayable d) {

if (c==List.SELECT_COMMAND)
{
//Recupero l'indice dell'elemento selezionato
int index = b.getSelectedIndex();
if(index == 0) {

display.setCurrent(x);

/* IL PROBLEMA E' QUI' : il comando display non me lo riconosce il quanto la classe non è estesa a midlet.... come posso settare i comandi della seconda lista verso una terza lista senza utilizzare il setcurrent in questo modulo??? altrimenti esiste un modo per settarlo? se mi sono spiegato male disp... ditemelo.... grazie a tutti della cortesia...*/

}
}
}

public void destroyApp(boolean unconditional) {
}


}







HelloMIDlet.java :



package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.OutputConnection;
import javax.microedition.io.Connector;
import javax.microedition.io.ConnectionNotFoundException;
import java.io.InputStream;

public class HelloMIDlet extends MIDlet implements CommandListener {

private Command exit; // The exit command
private Display display; // The display for this MIDlet
private Command Back;
public List a;
public List x;
public HelloMIDlet() {
display = Display.getDisplay(this);
exit = new Command("Exit", Command.EXIT, 0);
Back = new Command("Back", Command.BACK, 1);
}

public void startApp() {


a = new List ("Formulario by hertion", List.IMPLICIT);
a.append(" Matematica", null);// lista implicita
a.append(" 2 scelta", null);
a.append(" 3 scelta ", null);
a.append(" 4 scelta ", null);


a.addCommand(exit);
a.setCommandListener(this);
display.setCurrent(a);

/////////////////////////*****Matematica******////////////////////////////////

x= Matematica.b;
x.addCommand(Back);
x.setCommandListener(this);





}

public void pauseApp() {
}

public void destroyApp(boolean unconditional) {
}

public void commandAction(Command c, Displayable s) {
if (c == exit) {
destroyApp(false);
notifyDestroyed();
}
else if(c==Back){
display.setCurrent(a);
}
else if (c==List.SELECT_COMMAND)
{
//Recupero l'indice dell'elemento selezionato
int index = a.getSelectedIndex();
if(index == 0) {

display.setCurrent(x);
}
}
}

}







P.S.: ESSENDO STATIC NON MI FA IMPLEMENTARE NEMMENO IL COMMANDLISTENER.... SI PUO RIMEDIARE?... XKE SE NO UNA LISTA SENZA COMMAND LISTENER NON HA TANTO SENSO XD SCUSATE PER IL CAPS LOCK MA TEMEVO K IN TUTTO IL CODICE NON SI LEGGESSE QLL K SCRIVEVO XD
 
Ultima modifica:
Ciao Hertion, allora il problema qua è un po basilare, cioè non ti è chiaro come strutturare l'applicazione. Ti consiglio di consultare alcune guide J2ME di mrwebmaster che negli esempi puoi trovare struttura di applicazione https://www.mrw.it/j2me/articoli/, anche se non trattano specificatamente il tuo problema. Inoltre ti consiglio di leggere qualche guida che parte da zero su J2ME tipo qualche manuale della mokabyte che sono gratuiti ed in pdf. Dunque io ho ritoccato un po il tuo codice, cambiando la struttura delle classi, senza utilizzare membri statici (e poi percè usi static??). Te li posto:
La classe HelloMIDlet:
Codice:
package hello;

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



public class HelloMIDlet extends MIDlet implements CommandListener {

    private Command exit; // The exit command
    private Display display; // The display for this MIDlet
    private Command Back;
    public List a;
    public List x;
    public Matematica m;

    public HelloMIDlet() {
        display = Display.getDisplay(this);
        m = new Matematica(display);
        exit = new Command("Exit", Command.EXIT, 0);
        Back = new Command("Back", Command.BACK, 1);
    }

    public void startApp() {


        a = new List("Formulario by hertion", List.IMPLICIT);
        a.append(" Matematica", null);// lista implicita
        a.append(" 2 scelta", null);
        a.append(" 3 scelta ", null);
        a.append(" 4 scelta ", null);


        a.addCommand(exit);
        a.setCommandListener(this);
        display.setCurrent(a);

/////////////////////////*****Matematica******////////////////////////////////

        
        m.addCommand(Back);
        m.setCommandListener(this);





    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable s) {
        if (c == exit) {
            destroyApp(false);
            notifyDestroyed();
        } else if (c == Back) {
            display.setCurrent(a);
        } else if (c == List.SELECT_COMMAND) {
//Recupero l'indice dell'elemento selezionato
            int index = a.getSelectedIndex();
            if (index == 0) {

                display.setCurrent(m);
            }
        }
    }
}
La classe Matematica:
Codice:
package hello;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;



/**
 *
 * @author Administrator
 */
public class Matematica extends List implements CommandListener {

public Command Back;

public Image img;
public Form form;
public Display display;



public Matematica(Display display) {
super("Formulario by hertion", List.IMPLICIT);
this.display = display;
append(" Aritmetica ", null);// lista implicita
append(" Algebra ", null);
append(" Geometria del piano ", null);
append(" Geometria dello spazio ", null);
append(" Geometria dello spazio ", null);
append(" Geometria analitica ", null);
append(" Trigonometria ", null);
append(" Analisi ", null);
append(" Utilità ", null);
setCommandListener(this);
display.setCurrent(this);
}


public void commandAction(Command c, Displayable d) {

if (c==List.SELECT_COMMAND)
{
//Recupero l'indice dell'elemento selezionato
int index = getSelectedIndex();
if(index == 0) {



/* IL PROBLEMA E' QUI' : il comando display non me lo riconosce il quanto la classe non è estesa a midlet.... come posso settare i comandi della seconda lista verso una terza lista senza utilizzare il setcurrent in questo modulo??? altrimenti esiste un modo per settarlo? se mi sono spiegato male disp... ditemelo.... grazie a tutti della cortesia...
--------------
Adesso hai un riferimento che l'hai passato al costruttore dalla
MIDLet

*/

}
}
}

public void destroyApp(boolean unconditional) {
}


}
Adesso forse dovrebbe funzionare. In poche parole Matematica è una lista e quindi estende List ed implementa il CommandListener. Nel costruttore riceve un riferimento al Display dalla MIDLet principale, quindi all'interno della classe puoi utilizzare display per indirizzare altri menu oppure Form, non so cosa devi fare di preciso.

E nella MIDLet principale utilizzo direttamente l'oggetto Matematica dove creo un'istanza nella classe. Non so se ti è chiaro cmq ripeto ti consiglio di leggere qualche guida.
Facci sapere
Ciao
 
Xd

xD ora provero' cosi'..... avevo usato static xk mi avevano dtt cosi' xD xo non avevo pensato k il commandlistener non si potesse poi riferire a elementi statici xD per quanto riguarda la guida non si potrebbe avere un link??? l'unica k ho trovato è su html.it ma è alquanto generica.... mi servirebbe qualkosa di + approfondito..... cmq grazie a tutti della cortesia!! :love::love::love::love:
 

Discussioni simili