miércoles, 26 de marzo de 2008

Ejercicio 1: Diseño de la ventana

Descripción



Desarrollar un programa que muestre una secuencia de numeros determinada (1, 2, 3, 4, 5, 7) de manera constante e infinita (después de mostrar un 7 deberá mostrar un 1, 2, 3). Los datos deben mostrarse en una ventana en el centro de la misma como un texto grande y poseer un botón para detener el conteo y la secuencia.

Solución propuesta



Comenzemos por la parte más aburrida desde mi punto de vista: Crear la interfaz, para esto yo se que hay herramientas pero prefiero hacerlo a mano. Para esto necesitamos una ventana, un texto grande y un botón, así que usaremos un JFrame, un JLabel y un JButton.


public class Exercise1 extends JFrame {
private JLabel numberLabel = null;
private JButton stopButton = null;

//Sobreescribimos el constructor para darle un titulo al frame
public Exercise1() {
super("Ejercicio 1");

numberLabel = new JLabel(" ");
stopButton = new JButton("Detener");
}
}


Ahora continuemos con la apariencia de la etiqueta, necesitamos que sea un texto grande


//Recuperamos la fuente de la etiqueta
Font font = numberLabel.getFont();
//Recreamos la fuente con un tamaño de 32 puntos
font = font.deriveFont(32.0);
//Establecemos la fuente nueva de la etiqueta
numberLabel.setFont(font);


Ordenamos los elementos dentro de la ventana. A mi me parece un modelo muy aplicable a un BorderLayout


this.setLayout(new BorderLayout());
this.add(numberLabel, BorderLayout.CENTER);
this.add(stopButton, BorderLayout.PAGE_START);


Y finalmente mostramos el contenido de la ventana


//Ajustamos la ventana para el tamaño de los componentes
this.pack();
//Mostramos la ventana
this.setVisible(true);

Ejercicio 1: Contador infinito

Descripción



Desarrollar un programa que muestre una secuencia de numeros determinada (1, 2, 3, 4, 5, 7) de manera constante e infinita (después de mostrar un 7 deberá mostrar un 1, 2, 3). Los datos deben mostrarse en una ventana en el centro de la misma como un texto grande y poseer un botón para detener el conteo y la secuencia.

Bases de manifiestos.

La variable classpath es un valor que le dice a Java donde buscar las clases que usará para ejecutarse; esto es importante si estamos trabajando con componentes que alguien más ha escrito y nosotros reultilizamos. Por medio de un archivo de manifiesto podemos decirle a Java que use ciertos archivos JAR como parte de su classpath y volver nuestros JAR's en cuasi-ejecutables muy prácticos.

Tomemos un ejemplo simple: Tenemos una clase M que depende de la librería N para poderse ejecutar; M tiene un método main y nos interesa distribuirla por medio de un JAR que pueda ejecutarse facilmente. Para esto vamos a seguir este sencillo proceso:


  1. Compilar el archivo java de la clase M, esto nos generará un archivo M.class

  2. Colocar este archivo class en un nuevo directorio, al que llamaremos build.

  3. Dentro de la carpeta build crearemos una carpeta META-INF.

  4. En esta nueva carpeta crearemos un archivo de texto llamado MANIFEST.MF. El contenido del archivo más o menos es el siguiente.


    Main-Class: paquete.M
    Class-Path: N.jar


  5. Empaquetamos el contenido de nuestra carpeta build en un archivo jar.

  6. Si damos doble click sobre el jar generado debería ejecutarse la clase M



En posteriores posts detallare un poco más los detalles del proceso y como ordenar un poco el mismo, además de describir las partes que lo forman.

jueves, 6 de marzo de 2008

Tareas en Segundo Plano (Swing)

Algunas ocasiones necesitas poner una tarea en especial a ajecutarse cuando halla tiempo, es decir, no en este momento o simplemente que espere a que los recursos esten disponibles para poder dar a otra tarea más importante algo de tiempo. Realizar esto en entornos Swing es bastante simple con la clase SwingUtils. El código es sencillo:


public void ejecutaDespues() {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Hacer algo.
}
});
}