sábado, 26 de mayo de 2012

Primera aplicación en Blackberry: Calculadora

Como primer ejemplo, se va a crear una aplicación que simule a una calculadora. Con esto vamos a familiarizarnos con la UI de Blackberry.
Básicamente, cada pantalla que muestre nuestra aplicación es una Screen (obvio), la cual esta dividida en uno o varios Manager, la cuales contienen los Field correspondientes. La Screen es, por defecto, un VerticalFieldManager, es decir, todos los elementos que se añadan a la pantalla se van a mostrar verticalmente.
Mediante las propiedades de estos Manager hay que ingeniárselas para mostrar todos lo botones y elementos de la pantalla de la forma que deseamos.
Para hacer una calculadora básica, vamos a utilizar:

  • La clase ButtonField, para crear los botones
  • EditField, para crear los campos de texto
  • LabelField, para crear etiquetas
  • La interfaz FieldChangeListener, para darle funcionalidad a los botones
A continuación, el código del ejemplo:

La clase principal (Calculadora.java):


package mypackage;

import net.rim.device.api.ui.UiApplication;

/**
* This class extends the UiApplication class, providing a
* graphical user interface.
*/
public class Calculadora extends UiApplication
{
/**
* Entry point for application
* @param args Command line arguments (not used)
*/
public static void main(String[] args)
{
    // Create a new instance of the application and make the currently
    // running thread the application's event dispatch thread.
    Calculadora theApp = new Calculadora();  
    theApp.enterEventDispatcher();
}
   

/**
* Creates a new Calculadora object
*/
public Calculadora()
{   
    // Push a screen onto the UI stack for rendering.
    pushScreen(new Pantalla());
}    
}

La clase que dibuja la pantalla (Pantalla.java):

package mypackage;

import net.rim.device.api.ui.container.MainScreen;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;

/**
* A class extending the MainScreen class, which provides default standard
* behavior for BlackBerry GUI applications.
*/
public final class Pantalla extends MainScreen implements FieldChangeListener {
   private LabelField tituloApp, operando1Etiqueta, operando2Etiqueta,
   resultadoEtiqueta, resultado;

   private EditField operando1, operando2;
   private ButtonField suma, resta, multiplicacion, division;

   public Pantalla() {
   // Titulo de la aplicación
   tituloApp = new LabelField("Calculadora");
   setTitle(tituloApp);

   // LabelField para escribir texto
   operando1Etiqueta = new LabelField("Operando 1:");
   // Se añade a la pantalla
   add(operando1Etiqueta);
   // EditField para campo de texto (BasicEditField permite crear filtros,
   // en este caso, solo se admite insertar enteros
   operando1 = new EditField(BasicEditField.FILTER_INTEGER);
   // Se añade a la pantalla
   add(operando1);

   operando2Etiqueta = new LabelField("Operando 2:");
   add(operando2Etiqueta);
   operando2 = new EditField(BasicEditField.FILTER_INTEGER);
   add(operando2);

   resultadoEtiqueta = new LabelField("Resultado");
   add(resultadoEtiqueta);

   resultado = new LabelField();
   add(resultado);

   // ButtonField para crear un botón (se especifica que el boton va a
   // consumir el evento click -para blackberry tactil-)
   suma = new ButtonField("Sumar", ButtonField.CONSUME_CLICK);
   // Se añade a la pantalla
   add(suma);
   // Acción que va a realizar cuando se pulse el boton
   suma.setChangeListener(this);

   resta = new ButtonField("Resta", ButtonField.CONSUME_CLICK);
   add(resta);
   resta.setChangeListener(this);

   multiplicacion = new ButtonField("Multiplicación",
   ButtonField.CONSUME_CLICK);
   add(multiplicacion);
   multiplicacion.setChangeListener(this);

   division = new ButtonField("División", ButtonField.CONSUME_CLICK);
   add(division);
   division.setChangeListener(this);
   }

   public void fieldChanged(Field field, int context) {
   // Pasamos a entero el texto de los campos
   int operando1Int = Integer.parseInt(operando1.getText().toString());
   int operando2Int = Integer.parseInt(operando2.getText().toString());
   int resultadoInt = 0;
   // Segun sea el field que ha llamado al ChangeListener, hara una cosa
   if (field == suma) {
   // Se hace la suma
   resultadoInt = operando1Int + operando2Int;

   } else if (field == resta) {
   resultadoInt = operando1Int - operando2Int;

   } else if (field == multiplicacion) {
   resultadoInt = operando1Int * operando2Int;

   } else if (field == division) {
   try {
   resultadoInt = operando1Int / operando2Int;
   } catch (Exception ex) {
   Dialog.alert("No puede dividir por 0. Por favor, vuelva a insertar un operando correcto");
   }
   }
   // Se pasa a String
   String resultadoString = String.valueOf(resultadoInt);
   // Se establece el valor del label resultado
   resultado.setText(resultadoString);
   }

}

No hay comentarios:

Publicar un comentario