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
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());
}
}
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);
}
}
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