domingo, 5 de outubro de 2008

Criando uma interface gráfica simples


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.