×

Discussion Board

Results 1 to 3 of 3
  1. #1
    Registered User
    Join Date
    Sep 2003
    Posts
    7

    Removing Default Exit Command

    Hello,

    I have created a form with one Command "OK", but when run on a Nokia 3650, I get Option Menu which has two commands :
    "OK" and "Exit".

    The Exit Command quits my application which I don't want,

    How can I remove the Exit Command.

    Thanks in advance.

    Fazal

  2. #2
    Super Contributor
    Join Date
    Mar 2003
    Location
    Israel
    Posts
    2,280
    You can't. That exit command is added automatically by the JVM on S60 devices.
    The only way to get rid of it is using a FullCanvas.

    shmoove

  3. #3
    Registered User
    Join Date
    Sep 2004
    Posts
    8

    A solution in a textbox

    I´ve made a TextBox in order to show a question and two possible answers using the two soft buttons of a phone. It use the typical interface with CommandListener, and the two commands are put in the constructor. Here is the code:

    The TextBoxCanvas source:

    /*
    * TextBoxCanvas.java
    *
    * Created on 18 de enero de 2005, 13:04
    */

    import javax.microedition.lcdui.*;

    /**
    *
    * @author MacEdu The Programator
    * @version 1.0
    */
    public class TextBoxCanvas extends Canvas{

    //Nota: Derecha e izquierda son mirando en sentido del usuario al móvil
    private Font f;
    private String frase=null;
    private Command cmd1=null; //Comando de la izquierda
    private Command cmd2=null; //Comando de la derecha
    private final int SOFT_1=-6; //Tecla de acceso rápido de la izquierda
    private final int SOFT_2=-7; //Tecla de acceso rápido de la derecha
    private CommandListener cl=null; //Receptor de comandos
    private int xini; //Coordenada X inicial para el texto
    private int yini; //Coordenada Y inicial para el texto
    private int xfin; //Coordenada X final para el texto
    private int yfin; //Coordenada Y final para el texto

    public TextBoxCanvas(String frase, Command cmd1, Command cmd2){
    //Instancio una fuente y uso la pantalla completa
    f=Font.getFont(f.FACE_SYSTEM,f.STYLE_BOLD,f.SIZE_LARGE);
    this.setFullScreenMode(true);
    //Almaceno la frase y los comandos
    this.frase=frase;
    this.cmd1=cmd1;
    this.cmd2=cmd2;
    //Establezco los márgenes por defecto
    this.xini=2;
    this.yini=2;
    this.xfin=this.getWidth();
    this.yfin=this.getHeight()-f.getHeight();
    }

    //Arregla el bug del 6600
    public int getHeight(){
    try{
    if("Nokia6600".compareTo(System.getProperty("microedition.platform").substring(0,9))==0)
    return 208;
    else
    return super.getHeight();
    }
    catch(Exception e){
    return super.getHeight();
    }
    }

    //Establece los márgenes para el texto (izquierdo, superior, derecho e inferior) en píxeles
    public void setMargenes(int xizq, int ysup, int xder, int yinf){
    this.xini=xizq;
    this.yini=ysup;
    this.xfin=this.getWidth()-xder;
    this.yfin=this.getHeight()-f.getHeight()-yinf;
    }

    //Dice si el caracter pasado como argumento es un separador
    private boolean separador(char c){
    char[] separadores={' ','.',':',','};
    for (int i=0;i<separadores.length;i++){
    if (c==separadores[i])
    return true;
    }
    return false;
    }

    //Devuelve la longitud, en caracteres, de la palabra que comienza en el offset indicado
    private int SigPalabra(int offsetini){
    int len=0;
    while((offsetini+len)<frase.length() && !separador(frase.charAt(offsetini+len))){
    len++;
    }
    if (len==0 && (offsetini+len)<frase.length()) //Era un separador
    len=1;
    return len;
    }

    public void paint(Graphics g){
    g.setFont(f);
    //Borro la pantalla
    g.setColor(255,255,255);
    g.fillRect(0,0, this.getWidth(),this.getHeight());
    //Escribo la frase saltando de línea cuando toque
    g.setColor(0,0,0);
    g.drawRect(xini-2,yini-2, xfin-xini+2, yfin-yini+2);
    int offset=0; //Comienzo desde el inicio de la frase
    int len=0; //Longitud inicial de cero caracteres
    int ypos=yini; //Comienzo en la primera línea
    //Dibujo la frase saltando de línea cada vez que haya un salto
    while(ypos<=(yfin-f.getHeight()) && offset<(frase.length())){
    //Mientras la subfrase no pase de la longitud que toca, sigo avanzando palabras
    int lenaux=len;
    int palabras=-1;
    while((f.substringWidth(frase,offset,lenaux)<(xfin-xini)) && ((offset+lenaux)<frase.length())){
    len=lenaux;
    palabras++;
    lenaux+=SigPalabra(offset+lenaux);
    //System.out.println("offset: "+offset+", lenaux: "+lenaux);
    }
    //Si he salido porque he acabado la frase o porque hay una palabra demasiado larga, muestro el trozo que pueda
    if (((f.substringWidth(frase,offset,lenaux)<(xfin-xini)) && ((offset+lenaux)<=frase.length())) || (palabras<2)) {
    len=lenaux;
    }
    //Y la dibujo en pantalla
    g.setClip(xini,yini,xfin-xini,yfin-yini);
    g.drawString(frase.substring(offset,offset+len).trim(), xini, ypos, g.LEFT | g.TOP);
    g.setClip(0,0,this.getWidth(),this.getHeight());
    //Actualizo las posiciones en la frase
    offset+=len;
    len=0;
    //Paso a la siguiente línea y lengthdoy una pequeña separación respecto de la línea anterior
    ypos+=f.getHeight()+2;
    }
    //Muestro los comandos
    if ((cmd1!=null) | (cmd2!=null)){
    //Dibujo una franja gris
    //g.setColor(200,200,200);
    //Dibujo una franja blanca por si me he comido ese trozo con la frase
    g.setColor(255,255,255);
    g.fillRect(0,this.getHeight()-f.getHeight()-2,this.getHeight(),this.getWidth());
    //Escribo los comandos
    g.setColor(0,0,0);
    if (cmd1!=null)
    g.drawString(cmd1.getLabel(),2,this.getHeight(),g.LEFT | g.BOTTOM);
    if (cmd2!=null)
    g.drawString(cmd2.getLabel(),this.getWidth()-f.stringWidth(cmd2.getLabel())-2,this.getHeight(),g.LEFT | g.BOTTOM);
    }
    }

    //Establece el receptor de comandos
    public void setCommandListener(CommandListener cl){
    this.cl=cl;
    }

    //Pone la nueva cadena a visualizar
    public void setString(String frase){
    this.frase=frase;
    repaint();
    }

    //Se ocupa de si pulsan uno de los comandos
    protected void keyPressed(int code){
    if(cl!=null){
    if(code==SOFT_1){ //Comando de la izquierda
    cl.commandAction(cmd1, this);
    }
    else if(code==SOFT_2){ //Comando de la derecha
    cl.commandAction(cmd2, this);
    }
    }
    }

    }

    And an example about its use:

    /*
    * PruebaTBC.java
    *
    * Created on 17 de enero de 2005, 18:09
    */

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

    /**
    *
    * @author MacEdu The Programator
    * @version 1.0
    */
    public class PruebaTBC extends MIDlet implements CommandListener{

    TextBoxCanvas tbc;
    Command izquierda;
    Command derecha;

    public void startApp() {
    izquierda=new Command("IZQ",Command.OK,1);
    derecha=new Command("Salir",Command.OK,1);
    tbc=new TextBoxCanvas("Esto es unabcdefghijklmnñopqrstuvwxyz frase de prueba para ver si funciona bien y ahora es cuando veo si me como los comandos o, por el contrario, y como dice mi padre, no, lo cuál sería maravilloso y estupendo",izquierda,derecha);
    tbc.setMargenes(20,50,30,20);
    tbc.setCommandListener(this);
    Display.getDisplay(this).setCurrent(tbc);
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }

    public void commandAction(Command c, Displayable d){
    if(c==izquierda){
    tbc.setString("Ha pulsado el comando de la izquierda");
    }
    else if(c==derecha){
    //tbc.setString("Derecha");
    destroyApp(true);
    notifyDestroyed();
    }
    }

    }

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
×