Cómo crear una ventana con SWT

Abajo muestro el código de ejemplo para crear una ventana usando el widget toolkit SWT.

import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;



public class SwtWindow extends Shell {

	/**
	 * Es necesario sobreescribir este método necesario para poder heredar de 
	 * cualquier widget de SWT.
	 */
	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}
	
	public SwtWindow(Display display){
		super(display);
		/**
		 * Título de la ventana
		 */
		setText("My First SWT Window");
		
		/**
		 * Fija el tamaño de la ventana
		 */
		this.setSize(500,300);
		
		/**
		 * Opciones de inicio de ventana
		 */
		//setMaximized (true);
		//setMinimized (true);
		//this.setFullScreen(true);

		/**
		 * Color de fondo
		 */
		this.setBackground(display.getSystemColor(SWT.COLOR_DARK_BLUE));
		this.setAlpha(100);
		
		/**
		 * Poner una imagen de fondo
		 */
		//this.setBackgroundImage(display, SwtWindow.class.getResourceAsStream("Mi_imagen.png"));
		
		
		/**
		 * Poner una imagen de icono (tamaño debe ser 16x16 píxeles)
		 */
		//Image small = new Image(display, SwtWindow.class.getResourceAsStream("Mi_imagen.png")); 
		//this.setImage(small);
		
		/**
		 * Poner una imagen de icono creándola desde código. 
		 * Se crean dos imágenes, una de 16x16 y otra de 32x32 píxeles para obtener 
		 * mejor calidad de renderizado. 
		 * Dependiendo de que SO se use, se puede necesitar una imagen u otra. Por ejemplo
		 * cuando se presiona ALT+TAB en Linux se necesita un icono mas grande.
		 */
		Image small = new Image(display, 16, 16);
		GC gc = new GC(small);
		gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
		gc.fillArc(0, 0, 16, 16, 45, 270);
		gc.dispose();
		
		Image large = new Image(display, 32, 32);
		gc = new GC(large);
		gc.setBackground(display.getSystemColor(SWT.COLOR_RED));
		gc.fillArc(0, 0, 32, 32, 45, 270);
		gc.dispose();

		this.setImages(new Image[] {small, large});
		this.setImage(small);
		

	}
	
	public static void main (String [] args) {
		try{
			Display display = Display.getDefault();
			SwtWindow window = new SwtWindow(display);
			window.open();
			window.layout();
			while (!window.isDisposed()) {
				if (!display.readAndDispatch()) {
					display.sleep();
				}
			}
			
		}catch(Exception e){
			e.printStackTrace();
		}
		
	}
	
}

Del código de ejemplo hay que destacar el método:

	@Override
	protected void checkSubclass() {
		// Disable the check that prevents subclassing of SWT components
	}

El cuál es necesario sobreescribir para poder heredar del widget Shell. En SWT para poder heredar de cualquier Widget es necesario sobreescribir este método, de lo contrario el programa dará un error en ejecución de tipo:

	org.eclipse.swt.SWTException: Subclassing not allowed

En el ejemplo también se crean dos imágenes usando código fuente. En la realidad esto no se suele hacer. Se suele cargar una imagen desde archivo (aparece comentado en el ejemplo como hacerlo), o bien no se establece imagen de icono para la ventana. En este último caso el icono que aparecerá en la ventana será el del toolkit por defecto del sistema operativo.

Acerca de franciscoguemes

Ingeniero en Informática
Esta entrada fue publicada en SWT. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s