Redescobrindo o Swing toolkit – Parte 2
Este artigo apresenta a conclusão do desenvolvimento do jogo Campo Minado utilizando a tecnologia Swing, uma biblioteca de componentes para a criação de programas com alta produtividade focada na interface com o usuário. Neste momento, abordaremos as regras do jogo, o uso de imagens e a lógica implementada para sua execução.

Em que situação o tema é útil
Este tema é de grande importância para todo desenvolvedor interessado no desenvolvimento de aplicações Swing. A partir desse conhecimento o leitor estará apto a desenvolver novos jogos e aplicações comerciais Desktop em Java.

Para concluir nossos estudos sobre o Swing, neste artigo vamos finalizar a implementação da nossa aplicação exemplo, o jogo Campo Minado. Nesta etapa, analisaremos os pontos relacionados às funcionalidades do jogo, como o uso de imagens e a lógica implementada para sua execução, assim como detalharemos um pouco mais sobre os principais tipos de gerenciadores de layout que podem ser utilizados em janelas para as aplicações Desktop Java.

Definindo o conteúdo do Campo Minado

Após definidos os elementos do menuBar da aplicação, devemos adicionar o conteúdo ao contentPane (lembrando que o conteúdo, o campo minado, será armazenado nesse painel). O contentPane, assim como outros contêineres internos, é gerenciado pelo rootPane da janela. Como vimos na primeira parte desse artigo, o contentPane é o contêiner intermediário de todas as janelas de nível superior (Frames, Applets ou Dialogs), fazendo a ligação entre os componentes e a janela. Essa abordagem diverge da utilizada pelos contêineres AWT pelo fato destes contêineres permitirem que o conteúdo seja adicionado diretamente ao contêiner principal, através do método add() da classe java.awt.Container.

No caso dos contêineres do pacote Swing, o método add() é sobrescrito para adicionar o componente ao contêiner contentPane. À medida que realizamos a inserção dos componentes na janela, devemos ter a preocupação em relação ao tipo do layout que será utilizado no(s) painel(is) da aplicação, sendo essencial o domínio sobre um tema que passa despercebido no início da programação de interfaces com Swing: os gerenciadores de layout.

Gerenciadores de layout (Layout Managers)

Gerenciadores de layout são objetos disponibilizados pela API do Swing que possuem a função de determinar a posição e o tamanho dos componentes dentro do contêiner, tratando-se de um grupo de objetos que implementam a interface LayoutManager. Podemos optar por não utilizar um gerenciador de layout no painel através da chamada ao método setLayout() da janela (classe JFrame e correspondentes) passando o valor null.

Neste caso, quando optamos por não utilizar um gerenciador de layout embutido, os valores indicando a posição e o tamanho dos componentes no painel assumirão valores absolutos (ao invés dos definidos pelo gerenciador de layout), permitindo customizar o layout da janela. Por exemplo, ao utilizar o GridLayout ele define que os componentes adicionados (seja JLabel, JButton ou qualquer outro) serão ordenados seguindo uma estrutura de matriz, posicionando cada elemento na próxima célula (alinha coluna).

Quando lidamos com valores absolutos do componente, sem o intermédio de um gerenciador, a posição é determinada por meio do método setBounds(). Este método é implementado na classe java.awt.Component e herdado pela classe javax.swing.JComponent, que por sua vez é a superclasse dos componentes Swing.

Mas como vimos anteriormente, vamos utilizar um ...

Quer ler esse conteúdo completo? Tenha acesso completo