1. Introducció a les Interfícies Gràfiques (GUI)
Fins ara hem interactuat amb els programes a través de la consola i fitxers de text. En el desenvolupament d'aplicacions per a usuaris finals, les Interfícies Gràfiques d'Usuari (GUI) permeten una interacció visual intuïtiva mitjançant finestres, botons, formularis i menús.
Java inclou per defecte biblioteques gràfiques com Swing (paquet javax.swing) i AWT (paquet java.awt), que permeten construir interfícies multiplataforma que s'executen igual a Windows, macOS i Linux.
2. Finestres i Components Visuals Bàsics
Els components bàsics més utilitzats són:
JFrame: Representa la finestra principal de l'aplicació, amb barra de títol, botons de minimitzar, maximitzar i tancar.
JLabel: Text o etiqueta no editable utilitzada per mostrar informació a l'usuari.
JTextField: Camp d'una sola línia que permet a l'usuari escriure text o nombres.
JButton: Botó interactiu que desencadena una acció en fer-hi clic.
Exemple: Finestra senzilla amb Swing
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JButton;
import java.awt.FlowLayout;
void main() {
// Creem la finestra principal
JFrame finestra = new JFrame("La meva primera finestra");
finestra.setSize(350, 150);
finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
finestra.setLayout(new FlowLayout()); // Disposició fluida dels components
// Creem els components
JLabel etiqueta = new JLabel("Hola des d'una interfície gràfica!");
JButton boto = new JButton("D'acord");
// Afegim els components a la finestra
finestra.add(etiqueta);
finestra.add(boto);
// Fem visible la finestra
finestra.setVisible(true);
}
3. Programació Orientada a Esdeveniments (Event-Driven)
A diferència dels programes lineals per consola, en una aplicació gràfica l'ordre d'execució el determina l'usuari:
- L'usuari realitza una acció (com fer clic sobre un
JButton o prémer Enter en un camp de text).
- El sistema genera un objecte esdeveniment (
ActionEvent).
- S'executa el codi que hem associat a aquest esdeveniment mitjançant un Listener.
Associar un ActionListener amb una expressió Lambda
Gràcies a les expressions lambda de Java, podem programar la resposta al clic d'un botó de manera neta i concisa:
int comptador = 0;
JLabel resultat = new JLabel("Clics: 0");
JButton boto = new JButton("Fes clic aquí");
// En Java modern, ActionListener és una interfície funcional que podem implementar amb una lambda:
boto.addActionListener(e -> {
comptador++;
resultat.setText("Clics: " + comptador);
});
4. Creació de Formularis Interactius
Un formulari típic combina l'entrada d'un JTextField, el clic d'un JButton per processar les dades, i l'actualització d'un JLabel amb la resposta:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.FlowLayout;
void main() {
JFrame finestra = new JFrame("Conversor d'Euros a Dòlars");
finestra.setSize(380, 160);
finestra.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
finestra.setLayout(new FlowLayout());
JLabel etiquetaEntrada = new JLabel("Quantitat en €:");
JTextField campEuros = new JTextField(8);
JButton botoConvertir = new JButton("Convertir a $");
JLabel etiquetaResultat = new JLabel("Resultat: 0.00 $");
botoConvertir.addActionListener(e -> {
try {
double euros = Double.parseDouble(campEuros.getText());
double dolars = euros * 1.08; // Taxa de canvi d'exemple
etiquetaResultat.setText(String.format("Resultat: %.2f $", dolars));
} catch (NumberFormatException ex) {
etiquetaResultat.setText("Introdueix un nombre vàlid!");
}
});
finestra.add(etiquetaEntrada);
finestra.add(campEuros);
finestra.add(botoConvertir);
finestra.add(etiquetaResultat);
finestra.setVisible(true);
}
Exercicis Pràctics i Reptes
Posa a prova els teus coneixements dissenyant finestres, gestors de clics i formularis de càlcul.
Exercicis