Conversor millas a kilómetros en Swing

Índice

Versión 1

Vamos a realizar una pequeña aplicación que nos permita convertir kilómetros en millas y viceversa:

1552564360829

Está compuesto por dos cajas de texto y dos botones que permiten convertir entre las dos unidades.

Para hacer el código más mantenible, lo vamos a dividir en dos partes:

  • una para crear el interfaz gráfico de usuario
  • otra para manejar los eventos

De esta forma, podemos modificar el UI sin modificar la gestión de la ventana.

El prototipo de la aplicación será el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package swing.ejercicios;

import java.awt.Container;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

@SuppressWarnings("serial")
public class Converter extends JFrame {
	final private Container container = getContentPane();
	
	final private JTextField textFieldMiles =  new JTextField();
	final private JTextField textFieldKilometers =  new JTextField();
	
	final private JPanel panel1 = new JPanel();
	final private JPanel panel2 = new JPanel();
	final private JButton btnConvertToKilometers = new JButton("-> Kms");
	final private JButton btnConvertToMiles = new JButton("-> Millas");

	/**
	 * Create the frame.
	 */
	public Converter() {
		createGUI();
		attachEvents();
	}
	private void createGUI() {
		//Código para crear el UI
        ;
	}
	private void attachEvents() {
        //Código para manejar los eventos
		;
	}
	public static void main(String[] args) {
		SwingUtilities.invokeLater(() -> new Converter().setVisible(true));
	}
}

La parte UI la implementaremos de esta forma (cada cual la puede implementar a su gusto). Las únicas variables que debemos mantener son:

  • textFieldMiles
  • textFieldKilometers
  • btnConvertToKilometers
  • btnConvertToMiles

Pues se hace referencia a ellas en el resto del código.

1552567884371

Y ya sólo nos queda implementar los manejadores de eventos:

1552567900842

Pero no estamos controlando las excepciones: ¿Qué ocurre si introducimos algo distinto de un número? Saltará una excepción que hemos de controlar.

1552565158826

Modificamos ahora los manejadores para gestionar esta excepción:

1552567921016

También es posible crear un método para cada uno de los manejadores, de tal forma que el código todavía queda mucho más legible:

1552567940042

Versión 2

Vamos a usar botones de opción:

1552567508173

El código será el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//*****
public class ConverterDos extends JFrame {
    //Campos usados en toda la aplicación 
	static String toKmsCommand= "K";
	static String toMilesCommnad = "M";
    
	final private ButtonGroup group = new ButtonGroup();
	 
	final private Container container = getContentPane();
	final private JPanel panel = new JPanel();
	final private JPanel panel2 = new JPanel();
	
	
	final private JTextField textFieldQuantity =  new JTextField();

	final private JButton btnConvert = new JButton("Convertir");
	

Modificamos el método createGUI():

1552567977069

Y ahora modificamos el manejador de eventos:

1552567995875