Versión 1
Vamos a realizar una pequeña aplicación que nos permita convertir kilómetros en millas y viceversa:
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.
Y ya sólo nos queda implementar los manejadores de eventos:
Pero no estamos controlando las excepciones: ¿Qué ocurre si introducimos algo distinto de un número? Saltará una excepción que hemos de controlar.
Modificamos ahora los manejadores para gestionar esta excepción:
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:
Versión 2
Vamos a usar botones de opción:
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()
:
Y ahora modificamos el manejador de eventos: