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