quarta-feira, 4 de novembro de 2009

Criação de interfaces gráficas em Java usando Cardlayout

Vou abrir aqui um precedente e colocar um pequeno vídeo, não editado, com uma ajuda para uns amigos meus. Se o tempo o permitir, fica a promessa de criar uns vídeos mais produzidos e mais temas abordados.

Por vezes surge a necessidade de organizar a interface gráfica de uma aplicação em painéis separados que são apresentados ao utilizador em função de opções que ele faz, por exemplo, num menu.

Utilizando o Netbeans (ferramenta que uso para criação de aplicações em Java), ao criar uma nova aplicação Java desktop, são criados vários ficheiros sendo que, um deles, é a aplicação principal (normalmente uma classe com a designação XPTOView.java). No painel inspector, vemos que este formulário é composto por vários objectos:
  • FrameView – a janela propriamente dita
  • mainPanel – um JPanel onde são colocados os diversos controlos
  • menuBar – um JMenuBar: o menu que é apresentado no topo do ecrã
  • statusPanel – um painel que faz a divisão do painel principal e apresenta uma barra barra de estado no rodapé
A ideia então é usar o mainPanel para ir apresentando os diversos ecrãs ao utilizador. Para tal devemos indicar ao mainPanel que queremos usar o layout cardlayout e acrescentar ao mainPanel o conjunto do panels que são necessários para mostrar as diversas interfaces da aplicação. Imaginem um baralho de cartas onde cada carta é uma interface gráfica com o utilizador, é precisamente disso que se trata.

O Netbeans suporta este conceito de forma muito simples.

1.Crie uma nova aplicação Java Desktop (Basic application).
2.No painel Inspector, clicar com o botão direito do rato no mainPanel e definir o layout como CardLayout.
3.Ainda no Inspector e sobre o mainPanel clicar com o botão direito do rato e fazer "Add from Panel" / "Swing containers" e adicionar quantos painéis os desejados.
4.Cada painel associado vai ter um "cardname" (veja o painel Properties a secção Layout de cada “subpainel”).
5.Ao menu adicione alguns “menu items” por exemplo no menu File.
6.Desenhar os paineis...
7.A cada item do menu que adicionou em 5 ligue os respectivos eventos.
8.Em cada evento o que vamos fazer é indicar qual o painel a mostrar no mainPanel. Para tal temos de criar uma instância do objecto Cardlyout e indicar-lhe qual o card a mostrar:

1.//Obtém a instância do cardlayout associado ao mainPanel
CardLayout cl = (CardLayout)(mainPanel.getLayout());


//Activa o painel cujo card name é card2.
cl.show(mainPanel, "card2");

Sem comentários: