Artículos
Java

Hola Mundo con Java ME

06/Ago/2012

Java ME (Java Micro Edition) es una tecnología que esta enfocada no solo a teléfonos móviles si no a todo dispositivo que funcione con Java. En ese grupo podemos encontrar decodificadores de TV, lectores de tarjeta y demás.

En este primer artículo vamos a realizar un código sencillo que nos muestre un Hola Mundo con Java ME Mediante este codigo lo podras probar mas facilmente en un IDE el cual sea de tu preferencia ya sea Netbeans o Eclipse. Este codigo esta enfocado a telefonos móviles los cuales tienen una cierta configuracion y perfil.

Cuando hablamos de configuracion nos referimos a que debido a las diferentes capacidades de procesamiento de los telefonos móviles, el API de Java, se reduce dejando solo las funcionalidades básicas de dicho dispositivo.

En cuanto al perfil nos referimos a que diferentes móviles pueden tener diferentes caracteristicas, las cuales podrían ser una camara integrada o una pantalla tactil es en esto en las caracteristicas extra o especificas de los móviles.

Este código de Hola Mundo con Java ME vamos a realizarlo con un Perfil MIDP 2.0 y una configuracion CLDC 1.0 , el cual solo nos imprimirá en la pantalla de nuestro móvil el mensaje HOLA MUNDO.

Descargando Java ME

Lo primero que tienes que hacer antes de empezar a desarrollar el código Hola Mundo con Java ME es el descargarte la librería Java ME.

Así que lo primero que tenemos que hacer es descargarnos el Kit de Desarrollo de Java ME desde la página de Oracle.

En este Kit encontraremos, entre otras cosas, las definiciones de los dispositivos y los perfiles y configuraciones a los que hemos hecho mención anteriormente.

Empezando a codificar el Hola Mundo con Java ME

Lo primero que tenemos que saber es que las clases que construyamos para Java ME extenderán de la clase MIDlet. Esta clase MIDlet es la que nos proporcionara los metdos para el ciclo de vida de la aplicacion

public class HolaMundo extends MIDlet {...}

Como la clase MIDlet es abstracta necesitamos sobreescribir sus metodos.

Las librerías que necesitaremos de Java ME serán:

import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.*;

Por lo cual tendremos que importarlas antes de nuestro código.

Definiremos dos variables que nos servirán para mostrar en pantalla mi mensaje. Por un lado Display es sencillamente mi pantalla en el móvil, la variable mycanvas es en la que nostros dibujamos nuestro mensaje.

private Display display;
private MyCanvas mycanvas;

El inicio de la aplicación: strarApp()

En el inicio de la aplicación lo que haremos será, en primer lugar obtener acceso a la pantalla, es decir, al Display.

this.display = Display.getDisplay(this);

Instanciamos nuestro Canvas. Ahora veremos que tiene el Canvas y como inserta el texto.

this.mycanvas = new MyCanvas();

Y por último añadimos el Canvas a la pantalla mediante el método .setCurrent()

display.setCurrent(mycanvas);

El código completo de startApp() quedará de la siguiente forma:

protected void startApp() throws MIDletStateChangeException {        
  display = Display.getDisplay(this);
  this.mycanvas = new MyCanvas();		
  display.setCurrent(mycanvas);
}

El Canvas y la cadena Hola Mundo

Como hemos visto antes, la gestión de insertar la cadena se la hemos dejado a nuestra clase MyCanvas. La clase MyCanvas extiende de Canvas la cual es abstracta, debemos implementar su metodo paint(Graphics).

En el método paint tenemos un objeto Graphics el cual servirá para escribir nuestro «Hola Mundo», una característica de esta clase es que cuando se hace una instacia de ella, se llama al metodo paint para que dibuje lo que nosotros pusimos dentro del método.

class MyCanvas extends Canvas {
  protected void paint(Graphics g) {
    g.setColor(255,255,255);
    g.drawString("HOLA MUNDO", this.getWidth()/2, this.getHeight()/2,
                   Graphics.BASELINE|Graphics.HCENTER);
  }
}

También hemos añadido el método .setColor, el cual indica que el texto a insertar es blanco. Esto lo necesitamos ya que el fondo del Canvas es negro y no se verían las letras.

Probando la aplicación en emulador

Si probais la aplicación en el emulador que viene con el Kit de desarrollo de Java ME de Oracle obtendréis un resultado como el que se a continuación:

Pues con este código tenemos nuestra primera aplicación Hola Mundo con Java ME. Espero que os haya gustado.

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
Artículos
Java

Usando las clases HashSet y HashMap

11/Abr/2012

Antes de iniciar a explicar el codigo, tengo que señalar que tanto la clase HashSet como la clase HashMap tienen una ventaja la cual es, que los valores que se van insertando en la coleccion internamente no tendran un orden especifico, esto se debe a que estas clases realizan un ordenamiento interno mediante el hashcode de el elemento(Objeto), por lo cual no sabremos que elemento traerá.

Esto nos da una ventaja para nosotros que es poder sobrescribir el metodo .hashCode() y .equals() para asi, si tenemos un objeto que tienen sus mismas caracteristicas y mismo hashcode no se agregue a la colección , una de las principales ventajas de este metodo es la rapidez en la insercion de los elemento si tenemos cientos de elementosque agregar, esta coleccion es la indicada para este trabajo.

El algoritmo de busqueda de un elemento en la colecion es el siguiente

  1. Encuentra el elemento (Objeto) mediante el hashcode. Imagínense varios personas en un salon con la misma edad.
  2. Ya que encontro el elemento mediante el hashcode se realiza la comparacion si el objeto es igual mediante el método .equals(). Imaginen que en ese mismo salon se esta buscando a una persona con un nombre y apellido especifico.

Lo primero será definir un objeto de tipo Alumnos.

public class Alumnos {
    private int age;
    private String name;

    Alumnos(String name, int age){
    	this.name = name;
    	this.age = age;   
    }
}

Las variables age y name serán las necesarias para que se comparen los objetos y su hashcode.

Lo siguiente que haremos será insertar los objetos Alumnos en un HashSet.

Alumnos person1 = new Alumnos("Juan",18);
Alumnos person2 = new Alumnos("Miguel",25);
Alumnos person3 = new Alumnos("Luis",18);
Alumnos person4 = new Alumnos("Luis",18);
        
HashSet personas = new HashSet();
personas.add(person1);
personas.add(person2);
personas.add(person3);
personas.add(person4);

Si verificamos el tamaño del HashSet alumnos veremos que nos devuelve «4», ya que por defecto el HashSet no realiza ninguna comparación.

System.out.println(personas.size());

Ahora agregamos 4 objetos alumno a un HashMap.

Map m = new HashMap();
   
m.put(person1, "valor1");
m.put(person2, "valor2");
m.put(person3, "valor1");
m.put(person4, "mi valor");

El método .size() nos devolvera un tamaño de «4» ya que el HashMap tampoco realiza ninguna comparación. De igual manerá el método .keySet() devuelve todos los elementos del HashMap.

System.out.println(m.keySet());
System.out.println(m.size());

Ahora vamos a cambiar el comportamiento de la clase Alumnos para que al insertarlo en un HashMap o en un HashSet se valide si el elemento insertado ya existe.

Sobrescribimos el método .equals() de tal manera que dos objetos Alumno serán iguales si coinciden sus nombres.

@Override
public boolean equals(Object o) {
  if (o instanceof Alumnos) {
    Alumnos p = (Alumnos)o;
    return this.name.equals(p.name);
  } else {
    return false;
  }
}

De igual manera sobrescribimos el método .hashCode(). Para generar el hascode utilizamos la variable edad y la longitud del String, consiguiendo así un entero.

@Override
public int hashCode() {
  return age * this.name.length();
}

Ahora, una vez sobrescritos los métodos .hashCode() y .equals(), si verificamos el tamaño del HashSet alumnos veremos que nos devuelve «3» ya que, si hay un elemento igual, el metodo .add() devolvera false.

Map m = new HashMap();

De igual manera el método .size() sobre el HashMap.keySet() los nombres de 3 alumnos ya que el método .put() habrá devuelto false al insertar objetos iguales.

System.out.println(m.keySet());
System.out.println(m.size());

Una cosa que hay que tener en cuenta es que si se sobreescribe solo uno de sus metodos ya sea .hashCode() o .equals() no tendremos el comportamiento deseado. Hay que sobrescribir los dos.

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java
Artículos
Java

Formato a Fechas en Java con DateFormat

16/Mar/2012

En el dia de hoy les explicare como formatear una fecha en Java. Lo primero que haremos será usar una de las clases de el paquete java.text. Esta clase es DateFormat. De igual manera utilizaremos la clase Date y Locale del paquete java.util.

Un detalle de la clase DateFormat de Java es que es abstracta por lo cual usaremos metodos estaticos para que nos devuelvan una instancia de la clase. en caso de usar el codigo les recuerdo realizar los import de las clases necesarias

Lo primero crearemos una instancia de la clase Date:

Date date = new Date();

Crearemos una instancia de la clase Locale. Como ven ingrese parametros al constructor los cuales especifican el lenguaje y pais respectivamente. Ingrese al constructor parametros para que muestre la fecha en Brasil (pt,BR).

Locale locBR = new Locale("pt","BR");

Ahora creamos un array de DateFormat.

DateFormat[]df = new DateFormat[4];

A cada una de las posiciones le damos una instancia de DateFormat. El metodo getDateInstance regresa una instancia:

df[0]= DateFormat.getDateInstance(DateFormat.MEDIUM);
df[1]= DateFormat.getDateInstance(DateFormat.LONG);
df[2]= DateFormat.getDateInstance(DateFormat.SHORT);
df[3]= DateFormat.getDateInstance(DateFormat.LONG, locBR );

A cada una de las instancias le pasamos constantes, de cualquier forma, hay mas constantes las cuales podrias revisar en el API y hacer prueba. A la última de las instancias le pasamos el locale para que me de formato en el país.

Recordar que como DateFormat es abstracta no podemos hacer esto new DateFormat().

Por último hacemos un loop para iterar sobre el array y damos el formato a la fecha que habiamos creado arriba

for(DateFormat d : df)
  System.out.println(d.format(date));

Vídeos sobre Java

Disfruta también de nuestros artículos sobre Java en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Java

¿Te atreves a probar tus habilidades y conocimiento en Java con nuestro test?

Test Java