Categorías
GUI Versus

Swing vs SWT – Comparación lado a lado

En muchos artículos, los desarrolladores han comparado Swing con SWT con muchos detalles. Sin embargo, no existe una comparación en paralelo mediante el uso de un diagrama que pueda dar una impresión directa de en qué se diferencian. En esta publicación, compararé Swing y SWT uno al lado del otro y probaré la diferencia de esas dos bibliotecas. Como sabrá, esas dos bibliotecas tienen principalmente tres aspectos para comparar: widgets disponibles, administradores de diseño y tipos de manejo de eventos. Además de una comparación lado a lado, daré un ejemplo de código simple al final.

1. Comparación de jerarquía de clases básica.
2. Gerentes de diseño.
3. Tipos de eventos.
4. Ejemplo de código.

1. Comparación de jerarquía de clases básica.

2. Gerentes de diseño.

Dado que Swing se basa en AWT y proporciona una apariencia y una sensación conectables, Swing debería tener todos los administradores de diseño de AWT. Esto puede hacer que el problema sea un poco más complicado que SWT. SWT es un sistema completo en sí mismo y no es necesario consultar otras bibliotecas. Esta puede ser otra ventaja de SWT sobre Swing.

3. Tipos de eventos.
Swing también tiene todos los eventos de AWT.

4. Ejemplos de código

Los siguientes ejemplos de código usarán gridlayout de Swing y SWT, y agregarán un detector de acción para un botón. Puede dar una idea de cómo se usan Swing y SWT de manera diferente.

Ejemplo de código de swing:

public class TestSwing extends JFrame {
 
	public TestSwing() {
 
		JPanel panel = new JPanel();
 
		panel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
 
		panel.setLayout(new GridLayout(2, 2, 50, 50));
 
		final JLabel l1 = new JLabel("nothing");
 
		JButton b1 = new JButton("Start");
		b1.addActionListener(new ActionListener() {
 
			public void actionPerformed(ActionEvent ae) {
				l1.setText("Button has been clicked");
			}
 
		});
 
		panel.add(b1);
		panel.add(l1);
		panel.add(new JButton("Start"));
 
		add(panel);
 
		setTitle("Swing Example");
		setSize(600, 400);
		setLocationRelativeTo(null);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
	}
 
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				TestSwing ex = new TestSwing();
				ex.setVisible(true);
			}
		});
	}
 
}

Ejemplo de código SWT:

public class TestSWT {
 
	public static void main(String[] args) {
 
		Display display = new Display();
		Shell shell = new Shell(display);
 
		GridLayout gridLayout = new GridLayout();
		gridLayout.numColumns = 2;
		gridLayout.makeColumnsEqualWidth = true;
 
		shell.setLayout(gridLayout);
 
		Button b1 = new Button(shell, SWT.PUSH);
		b1.setText("button 1");
		b1.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
 
		final Label l2 = new Label(shell, SWT.PUSH);
		l2.setText("button 2");
		GridData gridData = new GridData(GridData.VERTICAL_ALIGN_END);
		l2.setLayoutData(gridData);
 
		Button button3 = new Button(shell, SWT.PUSH);
		button3.setText("button 3");
 
		button3.addSelectionListener(new SelectionListener() {
			@Override
			public void widgetDefaultSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
				l2.setText("clicked");
			}
 
			@Override
			public void widgetSelected(SelectionEvent arg0) {
				// TODO Auto-generated method stub
				l2.setText("clicked");
			}
		});
 
		button3.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL));
 
		shell.pack();
		shell.open();
	}
}

Como Eclipse es un marco exitoso probado para el desarrollo de software extensible, SWT es una buena opción ya que son más compatibles entre sí.