Hoje resolvi escrever um pouco sobre criação de interfaces gráficas em Java usando Swing.
Vamos fazer algo simples, apenas para mostrar alguns conceitos interessantes de Java e Swing.
import javax.swing.*;
import java.awt.event.*;
public class MinhaInterface extends JFrame implements ActionListener {
public MinhaInterface() {
JButton b = new JButton("Clique aqui!");
b.addActionListener(this);
JPanel p = new JPanel();
p.add(b);
add(p);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
pack();
setLocationRelativeTo(null);
setVisible(true);
}
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(this, "Alô Mundo!");
}
public static void main(String[] args) {
new MinhaInterface();
}
}
A classe acima cria uma janela com um botão "Clique aqui!". Se você clicar no botão, vai aparecer uma caixa de diálogo com o texto "Alô Mundo!"
Então vamos ao código.
A linha 4 define a classe 'MinhaInterface', que neste caso estende a classe JFrame (Herança), e implementa a interface ActionListener. JFrame e ActionListener fazem parte dos pacotes javax.swing e java.awt.event, por isso são usados os imports das linhas 1 e 2.
Desta forma, a classe 'MinhaInterface' é ao mesmo tempo do tipo JFrame e do tipo ActionListener. Isso se chama Polimorfismo.
A linha 6 define o construtor da classe 'MinhaInterface'. Este construtor será chamado na linha 24, quando a classe 'MinhaInterface' for instanciada (é criado um objeto desta classe).
No construtor são definidas as operações que devem ser realizadas quando um objeto é criado. Neste caso as primeiras operações definem a criação de um botão (linha 7) e de um painel (linha 9).
A linha 7 cria um novo botão com o texto "Clique aqui!". Na linha 8 é adicionado um listener no botão, que serve para detectar quando o botão é acionado (através de um clique do mouse por exemplo). Como foi implementada a interface ActionListener na nossa própria classe, então esta classe também é um tipo de listener. Por isso podemos passar a própria classe 'MinhaInterface' como parâmetro para o método addActionListener(), usando a palavra reservada this.
Na linha 9 é criado um painel e na linha 10 o botão é adicionado neste painel. Na linha 11 o painel é adicionado na janela.
Nas linhas 13 a 16 a janela é configurada. O método setDefaultCloseOperation() define a operação a ser realizada ao fechar a janela, que neste caso é sair do programa. O método pack() define o tamanho da janela automaticamente, a partir do conteúdo da janela. O método setLocationRelativeTo(null) centraliza a janela na tela. E o método setVisible(true) torna a janela visível.
O método actionPerformed da linha 19 é obrigatório pois a classe 'MinhaInterface' está implementando um ActionListener. O método actionPerformed é chamado quando o botão é acionado. Dentro do método actionPerformed nós devemos colocar as operações que devem ser realizadas pelo botão. Neste caso quando o botão é acionado é exibida a mensagem "Alô mundo!" (linha 20).
E finalmente, nas linhas 23 a 25, é executado o método main(), que é por onde o programa começa. Na linha 24 é criado um objeto da classe MinhaInterface, executando o construtor que vimos acima.