ZUI es una librería Java, de menos de 100kb, que permite generar pantallas Swing separando la lógica de presentación de la lógica de aplicación. Esto se consigue haciendo que, tanto la distribución visual de los widgets como los eventos que lanzan, se definan en un documento XML mientras que los métodos que reciben esos eventos se declaren en una clase Java.
Vamos a hacer un contador con 3 botones que permitirán decrementar, incrementar y resetear el valor de dicho contador.
Primero hay que crear el documento XML que definirá la distribución de los widgets y de los eventos que lanzan.
<?xml version="1.0"?>
<zui title="XUL Challenge 2004" width="256" height="144">
<panel border="1" layout="c" contentLayout="cols=3">
<label id="counter" layout="cspan=3" alignment="right" text="0"/>
<button text="Dec(-)" onAction="dec"/>
<button text="Clear" onAction="clear"/>
<button text="Inc(+)" onAction="inc"/>
</panel>
</zui>
El nombre que se da al documento XML ha de ser el mismo que el nombre de la clase Java encargada de recibir los eventos. Además, este documento XML se debe situar en el mismo paquete en que se declare la clase.
package com.samples.counter;
import java.awt.event.ActionEvent;
import javax.swing.JLabel;
import javax.swing.UIManager;
import net.sf.zui.ZFrame;
public class CounterSample extends ZFrame {
public void dec(ActionEvent e) {
JLabel counter = (JLabel) this.getWidget("counter");
counter.setText("" + (Integer.parseInt(counter.getText()) - 1));
}
public final void clear(final ActionEvent e) {
JLabel counter = (JLabel) this.getWidget("counter");
counter.setText("0");
}
public final void inc(final ActionEvent e) {
JLabel counter = (JLabel) this.getWidget("counter");
counter.setText("" + (Integer.parseInt(counter.getText()) + 1));
}
}
Para lanzar el ejemplo sólo hay que crear una instancia de la clase y hacerla visible, igual que Swing.
CounterSample counter = new CounterSample();
counter.setVisible(true);