Aprendiendo GTK+: Contenedores

Publicado en C/C++, GTK el 29 de January, 2008 por Fran. (1 comentario)

A partir de este capítulo intentaré explicaros los widgets, que considero básicos, de GTK+ y a partir de ahí seréis vosotros quienes tengáis que ampliar conocimientos. Pero antes de eso todavía toca explicar una de las características de GTK+, que quizá le hacen algo especial respecto a otros, son los contenedores.

Los contenedores

Una aplicación GTK+ viene definida por un widget de una ventana (que explicaré más adelante) en el cual se colocan los otros widgets (entradas de texto, etiquetas, botones, …) para formar una interfaz gráfica de usuario. La peculiaridad de GTK+ es cómo se colocan dichos widgets, para ello se hacen uso de otros widgets llamados contenedores, éstos sirven para (como su propio nombre indica) contener otros widgets, de modo que para distribuir los widgets por la ventana primero deberemos colocar algún contenedor sobre el cual insertar dichos widgets. Esto hace de GTK+ diferente a otros lenguajes de interfaces gráficas, en los cuales los widgets se colocan por coordenadas.

Hay varios widgets básicos de contenedores:

  • GtkHBox: Es un contenedor horizontal, quiere decir que los widgets se colocan horizontalmente.
  • GtkVBox: Es un contenedor vertical, quiere decir que los widgets se colocan verticalmente.
  • GtkTable: Crea una tabla de MxN contenedores, los widgets se colocan en la posición AxB que queramos dentro de nuestra tabla MxN. Este se diferencia del resto en las funciones usadas para colocar los widgets, usará las suyas propias en lugar de las de GtkBox que explicaré a continuación.

(Como podéis ver os enlazo a la documentación de la API de GTK+ para cada widget, para mí es el mejor recurso de documentación.)

Leer el resto »

Java, UTF-8 y BOM

Publicado en Java el 23 de January, 2008 por Lek. (4 comentarios)

Esta semana ha vuelto cual boomerang un viejo problema que tuve hace tiempo. Este problema consiste en leer/escribir un archivo codificado en UTF-8 y que utilice BOM (Byte Order Marks).

La JVM de Sun, cómo no, tiene un bug que no se va a corregir y no lo maneja demasiado bien. De hecho, no lo maneja en absoluto y los trata como caracteres normales, corrientes y molientes. Al escribir, los 3 caracteres (0xEF0xBB0xBF) tendréis que añadirlos a mano. Pero al leer es donde está el verdadero problema a menos que queráis buscarlos y eliminarlos manualmente.

En una primera búsqueda encontré que se podría utilizar la clase DataInputStream, pero por mi experiencia también tiene un bug por el que el método readUTF() intenta leer más allá de la extensión del propio fichero, lo que hace que no sirva. Al final la solución pasa por hacer la siguiente ñapa sideral con clases del paquete java.nio:

FileReader fr = new FileReader (path);
BufferedReader br = new BufferedReader(fr);

String fichero = "";
String aux = "";
while ((aux=br.readLine()) != null) {
    fichero += aux + "\n";
}
//Putas chonadas que hay que hacer...
fichero = Charset.forName("UTF-8").decode(
        ByteBuffer.wrap(fichero.getBytes())).toString();
fr.close();
br.close();

Más información sobre los formatos UTF, aquí.

Head First Java

Publicado en Java, Libros el 21 de January, 2008 por Fran. (2 comentarios)

Head First JavaHead First Java (web) es un libro para el aprendizaje de Java, indicada para cualquier persona que quiera adentrarse en este lenguaje de programación.

Se explican casi todas las características básicas de Java de una manera sencilla y con humor, mediante la creación de una aplicación de ejemplo para Java la cual va aumentando de tamaño a medida que vamos profundizando en el libro.

Aunque hay que advertir que este libro no es un libro de consulta, de esos que se tienen en una estantería para cuando surge un problema echarles un ojo, es un libro para comenzar y adquirir una base sólida, para luego usar otros libros más indicados para la consulta de problemas concretos o de temáticas más concretas sobre cualquier aspecto de Java.

Como se puede ver en el título Head First Java, pertenece a la serie de libros de O’Reilly Head First, esta serie se caracteriza por tratar temáticas de programación de un modo diferente a como lo tratan en los libros, con toques de humor, dibujos y viñetas que explican conceptos de una manera amena y divertida.

Recomendación: Alta.
Nivel: Bajo.
Idioma: Inglés.

Aprendiendo GTK+: Primeros pasos

Publicado en C/C++, GTK el 14 de January, 2008 por Fran. (Sin comentarios)

Iniciando GTK+

Antes de empezar con otra cosa, voy a explicar como iniciar GTK+ en nuestra aplicación. Los pasos más importantes son los siguientes:

  1. Hay que inicializar el toolkit, para ello se llama a la siguiente función:
    gtk_init (int *argc, char **argv[]);

    Esta función se usa para iniciar el toolkit y parsear los parámetros relativos a GTK+ que reciba nuestra aplicación, de modo que GTK+ los use y no nos tengamos de preocupar de parsearlos nosotros, dichos parámetros son eliminados de la lista.

  2. Ejecutar el main loop (o bucle principal), éste se encarga de dejar a la aplicación en un bucle, hasta que llamemos a la función de salida de dicho bucle, en el cual se tratan las diferentes señales que se produzcan en nuestra aplicación. Para ello se llama a la siguiente función:
    gtk_main ();

    Para salir del bucle se llama a la siguiente función:

    gtk_main_quit ();
  3. Obviamente, antes de ejecutar el main loop se deberán tener los manejadores de las señales asignados y todas las variables inicializadas, ya que una vez se ejecuta no tendremos control sobre nada de la aplicación.

Leer el resto »