Componentes GUI

Propaganda
Componentes GUI
GUI – Grafical User Interface – São construídas a partir
de componentes GUI chamados de controles ou widgets
(windows gadgets – engenhocas de janela).
 Ex: JOptionPane fornece caixas de diálogos préempacotadas para entrada/saída, como vimos ao
usarmos showMessageDialog e showInputDialog.
 Existe diversas funcionalidades disponíveis nas
bibliotecas de classes Java destinadas a prover a
comunicação homem-máquina via interface gráfica.
 Os elementos básicos para criar um GUI residem em
dois pacotes: Swing e AWT.



AWT: Abstract Window Toolkit (pacote java.awt) são classes
básicas para construção de interfaces com janelas.
Swing: Fornece melhores alternativas aos componentes da
AWT. Implementado somente a partir da versão 1.2.
Componentes GUI


A aparência e maneira como um usuário pode interagir com
componentes AWT diferem de acordo com a plataforma.
Componentes Swing permitem especificar uniformemente a
aparência e o comportamento para o aplicativo em todas as
plataformas ou utilizar aparência e comportamento personalizados
em cada plataforma.
Componentes Swing são implementados diretamente na plataforma
Java sendo mais portáveis e flexíveis que os componentes originais
do pacote AWT que foram implementados na GUI da plataforma
subjacente, ou seja em código nativo. Por isto geralmente Swing
são mais usados.
Componentes GUI




Estas classes são parte de um conjunto mais genérico
de capacidades gráficas chamado de Java Foundation
Classes, ou JFC.
Componentes leves X Componentes pesados: São
chamados de componentes pesados aqueles que são
vinculados à plataforma local, ou dependem do sistema
de janela da plataforma local para determinar seu
comportamento e aparência, já os componentes leve
são aqueles que não estão vinculados a componentes
GUI reais da plataforma subjacente.
Alguns componentes Swing também são componentes
pesados, requerem interação direta com o sistema de
janela local o que pode restringir sua aparência e
funcionalidade.
Componentes leves fornecem melhor controle sobre sua
aparência e funcionalidade.
Componentes GUI

Duas palavras chave para nossa compreensão
são:


Componentes: Partes individuais a partir das quais
uma GUI é construída. São botões, menus, itens de
menu, caixas de seleção, etc.
Tratamento de eventos: São as possíveis respostas
disparadas por ações do usuário. Caso o usuário
ative um componente o sistema gerará um evento
que enviará uma notificação ao nosso sistema que
poderá então chamar um de seus métodos.
Componentes GUI
 Suplerclasses
comuns de muitos
componentes swing
Componentes GUI

Uma interface gráfica em Java é baseada em dois tipos
de elementos:



Todo programa que ofereça uma interface gráfica vai
conter pelo menos um container, que pode ser:





containers: São componentes que servem para agrupar e exibir
outros componentes , podem ser de alto nível ou intermediários.
components: São botões, labels, scrollbars, etc.
JFrame – janela principal do programa (top-level containers )
JDialog – janela para diálogos
JApplet – janela para Applets
Para construirmos uma interface gráfica em Java
adicionamos componentes (botões, menus, textos,
tabelas, listas, etc) sobre a área de um container
Em nosso exemplo iremos usar um JFrame:


Vejamos uma janela simples.
Esta janela possui os seguintes elementos:





JFrame: Armazena os demais componentes
JPanel: Serve para facilitar o posicionamento do botão label
(container intermediário)
JButton: O botão
JLabel: O texto: “Quantidade de clicks: 0”
Dos elementos acima:



JFrame são containers top-level, sempre haverá um dos 3
anteriormente citados
JPanel são containers intermediate, podem estar ou não
presentes (mas geralmente estão).
JButton e JLabel são componentes atômicos, não podem ser
usados para conter outros e geralmente respondem ao usuário.

Vejamos o código do exemplo anterior:
import javax.swing.*;
public class ExJanela
{
public static void main(String args[])
{
JFrame frame = new JFrame("Aplicação Swing");
JButton but = new JButton("Sou um botão");
JLabel texto = new JLabel("Quantidade de clicks: 0");
JPanel painel = new JPanel();
painel.add(but);
painel.add(texto);
frame.getContentPane().add(painel);
frame.pack();
frame.setVisible(true);
}
}
 Como
poderíamos adicionar
funcionalidades à janela? Usando herança
para gerar uma nova classe a partir de
JFrame.
 Vejamos como ficaria o código caso
usássemos herança:
import javax.swing.*;
public class ExJanela2 extends JFrame
{
JButton but;
JLabel texto;
JPanel painel;
public ExJanela2()
{
super("Aplicação Swing");
but = new JButton("Sou um botão");
texto = new JLabel("Quantidade de clicks: 0");
painel = new JPanel();
painel.add(but);
painel.add(texto);
getContentPane().add(painel);
}
public static void main(String args[])
{
ExJanela2 janela = new ExJanela2();
janela.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); // Nova linha
janela.pack();
janela.show();
}
}

Observe a nova linha acrescentada ao método
main. O método setDefaultCloseOperation
especifica como a janela irá se comportar ao ser
fechada. Seus possíveis argumentos são:



DISPOSE_ON_CLOSE – Destrói a janela
DO_NOTHING_ON_CLOSE – Desabilita a opção de
fechar a janela
HIDE_ON_CLOSE – Apenas fecha a janela

Teste o programa variando os parâmetros de
setDefaultCloseOperation e verificando o que
acontece.
 Acrescente a linha


painel.setLayout(new BoxLayout(painel,BoxLayout.Y_AXIS));
Observe o que acontece:
BoxLayout.Y_AXIS posiciona os componentes na vertical, se
colocar BosLayout.X_AXIS irá posicional na horizontal.

public class ExJanela2 extends JFrame
{
...
public ExJanela2()
{
...
painel = new JPanel();
painel.setLayout(new BoxLayout(painel,BoxLayout.Y_AXIS));
painel.add(but);
painel.add(texto);
...
}
public static void main(String args[])
{
...
}
}

Façamos alguns exercícios bem simples:




1) Implemente e execute o código abaixo no BlueJ.
2) Redimensione interativamente o tamanho da
janela e observe o posicionamento dos botões.
3) Coloque no construtor de FlowLayout um
argumento FlowLayout.LEFT e observe o resultado.
4) Adicione ao programa os seguintes componentes:
• JLabel label1 = new JLabel("Exemplo de texto");
• JTextField campo = new JTextField(15);
• Obs: Não esqueça de adicioná-los à janela.


import javax.swing.*;
import java.awt.*;
















public class TestaContainer
{
public static void main(String args[])
{
int i;
JFrame janela = new JFrame("Teste de janela");
janela.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
FlowLayout flow = new FlowLayout(FlowLayout.LEFT);
janela.setLayout(flow);
for (i = 1; i <= 6; i++)
janela.add(new JButton("aperte" + i));
janela.setVisible(true);
}
}
Download