LibGlade + GTK + Java + Eclipse

Publicado el mié 05 marzo 2008

Desde hace un tiempo que conozco libglade, una herramienta genial. Permite definir interfaces gráficas completas almacenándolas en un archivo XML.
Puedes crearlas en forma fácil con Glade 2 (Glade 3 no me funcionó) y gracias a que posee wrappers a casi cualquier lenguaje (C, C++, C#, Python, Java...)

Esto permite desarrollar la GUI con Glade y luego decidir que lenguaje usaremos. Además permite una integración visual con el entorno de escritorio.
En este caso haremos una GUI en Glade, el programa en Java con Eclipse y el motor para la GUI será GTK.

Necesitamos:

  • eclipse
  • glib-java
  • libgnome-java
  • libglade-java

Empecemos:
Creamos un proyecto en glade, hacemos una GUI simple para este caso
Código del archivo glade:

<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->

<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">



<glade-interface>



<widget class="GtkWindow" id="window1">

  <property name="visible">True</property>

  <property name="title" translatable="yes">window1</property>

  <property name="type">GTK_WINDOW_TOPLEVEL</property>

  <property name="window_position">GTK_WIN_POS_NONE</property>

  <property name="modal">False</property>

  <property name="resizable">True</property>

  <property name="destroy_with_parent">False</property>

  <property name="decorated">True</property>

  <property name="skip_taskbar_hint">False</property>

  <property name="skip_pager_hint">False</property>

  <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>

  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>

  <property name="focus_on_map">True</property>

  <property name="urgency_hint">False</property>

  <signal name="remove" handler="on_window1_destroy" last_modification_time="Thu, 06 Mar 2008 01:24:56 GMT"/>



  <child>

    <widget class="GtkHBox" id="hbox1">

      <property name="visible">True</property>

      <property name="homogeneous">False</property>

      <property name="spacing">0</property>



      <child>

<widget class="GtkButton" id="button1">

  <property name="visible">True</property>

  <property name="can_focus">True</property>

  <property name="label" translatable="yes">button1</property>

  <property name="use_underline">True</property>

  <property name="relief">GTK_RELIEF_NORMAL</property>

  <property name="focus_on_click">True</property>

</widget>

<packing>

  <property name="padding">0</property>

  <property name="expand">False</property>

  <property name="fill">False</property>

</packing>

      </child>



      <child>

<widget class="GtkButton" id="button2">

  <property name="visible">True</property>

  <property name="can_focus">True</property>

  <property name="label" translatable="yes">button2</property>

  <property name="use_underline">True</property>

  <property name="relief">GTK_RELIEF_NORMAL</property>

  <property name="focus_on_click">True</property>

</widget>

<packing>

  <property name="padding">0</property>

  <property name="expand">False</property>

  <property name="fill">False</property>

</packing>

      </child>



      <child>

<widget class="GtkButton" id="button3">

  <property name="visible">True</property>

  <property name="can_focus">True</property>

  <property name="label" translatable="yes">button3</property>

  <property name="use_underline">True</property>

  <property name="relief">GTK_RELIEF_NORMAL</property>

  <property name="focus_on_click">True</property>

</widget>

<packing>

  <property name="padding">0</property>

  <property name="expand">False</property>

  <property name="fill">False</property>

</packing>

      </child>

    </widget>

  </child>

</widget>



</glade-interface>

Luego creamos un proyecto en eclipse, en la ficha de librerías agregamos los siguentes jar:

  • /usr/share/java/gladexx.jar
  • /usr/share/java/glibxx.jar
  • /usr/share/java/gnomexx.jar
  • /usr/share/java/gtkxx.jar

Finalmente creamos una clase y agregamos el enlace al archivo XML
Código java para la clase:

package org.GUI.prueba;



import java.io.FileNotFoundException;

import java.io.IOException;

import org.gnu.glade.GladeXMLException;

import org.gnu.glade.LibGlade;

import org.gnu.gtk.Gtk;



public class ventana {



/**

* @param args

*/



LibGlade glade;



public ventana() throws GladeXMLException, FileNotFoundException, IOException{

glade = new LibGlade("data/gui_xml.glade", this);

}



public void on_window1_destroy(){

System.exit(1);

}



public static void main(String[] args) {

ventana s;

Gtk.init(args);

try{

s=new ventana();

}

catch (Exception e){

System.out.println("Esta cosa se cayó");

}

Gtk.main();

}

}