miércoles, 5 de marzo de 2008

LibGlade + GTK + Java + Eclipse

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

}

}





No hay comentarios: