Conheça o Plugfeed | » Início » Programação » Interface gráfica com Swing
Conheça o Plugfeed | » Início » Programação » Interface gráfica com Swing -->
 
Avaliação: | Publicado em: 04/12/2006
Interface gráfica com Swing
Dayvid Lima Desenvolvedor Java há mais de 5 anos, atualmente consultor java em empresa multinacional utilizando recursos avançados da tecnologia J2EE com servidores de aplicação em plataforma Solaris para gerenciamento de redes e integração de sistemas.
Interface gráfica com Swing

Nesse artigo mostrarei como criar uma aplicação com interface gráfica em Swing utilizando um código de exemplo. Como é o primeiro artigo com utilização de Swing, estarei abordando apenas aspectos básicos e essenciais para o funcionamento do mesmo, pretendo em um artigo próximo detalhar mais alguns pontos interessantes.

Aqui temos um "snapshot" da tela do programa final:


E aqui temos o código inteiro da aplicação:

import javax.swing.*;
import java.awt.Dimension;

// define a classe HelloWorld
public class HelloWorld {

    private static void createAndShowGUI() {
        // atribui uma decoração mais bonita a janela
        JFrame.setDefaultLookAndFeelDecorated(true);

        // cria e define o tamanho da janela
        JFrame frame = new JFrame("Plugmasters");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(new Dimension(230, 140));

        // adiciona um label com a frase "Plugando webmasters de todo o Brasil"
        JLabel label = new JLabel("Plugando webmasters de todo o Brasil");
        frame.getContentPane().add(label);

        // mostra a janela
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        // mostra a aplicação gráfica como uma thread
        // normalmente a forma mais segura de executar
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });

    }
}


Essa é uma aplicação bem simples escrita com Swing. Não é muito mas o código demonstra o básico de todo programa desenvolvido com Swing.
    1 - Importar os pacotes necessários
    2 - Definir um "container" de nível superior
    3 - Mostrar o "container"
    4 - Rodar em "threat" (modo mais seguro)


A primeira linha importa o pacote Swing principal:

    import javax.swing.*;

A segunda linha importa o objeto Dimension, utilizado para definir o tamanho que a janela da aplicação terá:
    import java.awt.Dimension;

Esses são os dois pacotes necessários para o funcionamento do HelloWorld.java. Entretanto a maioria das aplicações desenvolvidas com Swing, também necessitam fazer a importação de mais dois pacotes AWT:
    import java.awt.*;
    import java.awt.event.*;

Esses pacotes são necessários porque os components do Swing utilizam a infra-estrutura do  AWT, incluindo o modelo de evento AWT. O modelo do evento controla como um componente reage aos eventos tais como cliques em botões e movimento do mouse.

Cada programa com uma interface gráfica do Swing deve ter pelo menos um recipiente top-level do Swing. Um recipiente top-level do Swing fornece o suporte que os componentes do Swing necessitam para desenhar e manipular os eventos. Há três tipos de recipientes top-level geralmente utilizados do Swing: JFrame, JDialog, e (para applet) JApplet.  Cada objeto de JFrame executa uma única janela principal, e cada JDialog uma janela secundária (um dependente da janela em uma outra janela). Cada objeto de JApplet executa a área de exposição de um applet dentro de uma janela de browser

O exemplo de HelloWorld tem somente um recipiente top-level, um JFrame. Executado como um exemplo da classe de JFrame, um frame é uma janela que, por default, tem decorações tais como uma borda, um título, e botões para minimizar e fechar a janela. As aplicações com um GUI (Inteface Gráfica de Usuário) utilizam tipicamente pelo menos um frame.

Aqui está o código que define o tipo de decoração que terá a janela, e cria o frame:

    // atribui uma decoração mais bonita a janela
    JFrame.setDefaultLookAndFeelDecorated(true);

    // cria e define o tamanho da janela
    JFrame frame = new JFrame("Plugmasters");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(new Dimension(230, 140));

    // adiciona um label com a frase "Plugando webmasters de todo o Brasil"
    JLabel label = new JLabel("Plugando webmasters de todo o Brasil");
    frame.getContentPane().add(label);

    // mostra a janela
    frame.setVisible(true);


À exceção dos recipientes top-level, tais como JFrame, todos os componentes do Swing descendem da classe de JComponent. HelloWorld usa um descendente de JComponent chamado JLabel, que mostra o texto "Plugando webmasters de todo o Brasil".

Essas duas linhas de código criam o componente JLabel e o adicionam ao frame:

    JLabel label = new JLabel("Plugmasters");
    frame.getContentPane().add(label);


Note que o label está sendo adicionado ao "content panel" em vez do próprio frame. Cada recipiente top-level tem um "content panel" que contém, diretamente ou indiretamente, todos os componentes visíveis (à exceção dos menus e das decorações da janela) no recipiente top-level.

Para fazer o programa fechar quando o botão de fechar é pressionado, nós incluímos este código:
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Nota: Em alguns programas mais antigos, no lugar de uma única chamada ao método setDefaultCloseOperation, você verá um código parecido com o abaixo, essa outra forma será abordada em um próximo artigo: 

    frame.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });

Por fim, para instanciar o nosso frame utilizamos o seguinte código:

    public static void main(String[] args) {
        // mostra a aplicação gráfica como uma thread
        // normalmente a forma mais segura de executar
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });

    }

Poderiamos apenas chamar o método createAndShowGUI(); da seguinte maneira:
    public static void main(String[] args) {
        // chama o método que irá criar a janela
        createAndShowGUI();
    }

Porém da forma anterior (rodando como uma thread) estamos prevenindo uma pequena falha que pode acontecer de que o frame feche antes mesmo de conseguir ser visualizado por você no momento da execução.

Existem diversas formas de compilar e rodar o programa mostrado aqui, segue abaixo os passos para rodar a partir da linha de comando do DOS:

    1 - copie e cole o código em um arquivo de texto qualquer
    2 - salve o arquivo como HelloWorld.java
    3 - no prompt do DOS e/ou shell do Linux/Unix, vá até o diretório onde salvou o arquivo
    4 - para compilar digite: javac HelloWorld.java
    5 - para rodar a aplicação digite: java HelloWorld

Gostaria de aproveitar para agradecer as pessoas que deixaram seus comentários e enviaram e-mails em meu primeiro artigo aqui, obrigado a todos.

Um grande abraço e até o próximo artigo.
Dayvid


Gostei muito da maneira como o assunto foi abordado, de maneira simples, porém direta!!!

Meus parabens
muito bem explicado!
Parabens!
oi tudo bom
Concordo com o Adriano.

Dayvid parabéns, você tem visão de como passar uma explicação.
Digones
Muito bom... mas acho o DW um cabeção :D (lol)
EUman
Cara adorei esse sisteminha de mostrar os posts! muito legal =D
Luis Henrique <luish7414@yahoo.com.br>
Gostei muito das sua explicação, mas fiquei com duvidas sobre as formas de decoração da tela. Existe outros modelos além deste q você cemonstrou?
Dayvid Lima
Olá Luis,
Sim existem outras formas de decoração da janela, essa maneira que estou utilizando é para utilizar o "LookAndFeel" padrão do Java.
Note que se você remover a linha:
JFrame.setDefaultLookAndFeelDecorated(true);

O programa irá aparecer com a decoração igual ao seu sistema operacional.

Para utilizar outras formas de decoração remova a linha acima e adicione as seguintes linhas:

try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
} catch (Exception e) {
// ... algum comentario sobre o erro
}

Onde "com.sun.java.swing.plaf.motif.MotifLookAndFeel" é a decoração que deseja utilizar, algumas só estão disponíveis em alguns sistemas operacionais.

Veja no site da sun as possíveis opções para o seu sistema operacional.

Aproveito para agradeçer o seu comentário, e espero ter ajudado.

Abraços,
Dayvid
Estou começando agora e ficou extremamnete simples de entender estes conceitos. Parabéns
Parabéns cara, e muito obrigado sanou muitas dúvidas minha.
Muito bom seus artigos,fáceis de entender e muito prático.
Parabens.
Um abraço
sou iniciante e consegui entender bem o seu artigo...bela didatica...parabnes
abraços e não pare por ai
Robson - Ourinhos <robson.biso@gmail.com>
Gostei, quando tiver mais exemplos poste ai por favor!!!
mto bom!








Um produto Detetive.net