LPV
gabriel jesus
COMPONENTES
SWING
Java
Como
Programar
8ª Edição
RESUMO
BASEADO
NO LIVRO
 Uma interface gráfica (GUI) apresenta um mecanismo
amigável ao usuário para interagir com um aplicativo.
 Uma GUI dá ao aplicativo uma aparência e
comportamento distintos.
 Uma boa interface facilita o aprendizado e utilização do
aplicativo pelo usuário.
 As GUI são construídas a partir de componentes GUI.
 Um componente GUI é um objeto que permite ao
usuário interagir via mouse, teclado, formulário,
reconhecimento de voz, etc.
 Muitas IDEs fornecem ferramentas de projeto GUI para
facilitar a construção da interface.
Introdução
 É possível utilizar uma caixa de diálogo para interagir
com o usuário.
 A caixa de diálogo é utilizada para receber informações
do usuário ou exibir informações para o usuário.
 A classe JOptionPane do pacote javax.swing fornece
caixas de diálogos pré-construídas tanto para entrada
como para saída.
 Esses diálogos são exibidos invocando métodos
JOptionPane static.
 Uma caixa de diálogo modal só deve ser usada quando
for necessário impedir usuários de interagir com um
restante de um aplicativo até que eles descartem o
diálogo.
 Não é necessário a criação de um objeto para utilizar
os métodos showInputDialog, showMessageDialog e
parseInt. São métodos invocados a partir da classe.
JOptionPane
 Somente as caixas de diálogo não atendem todos os
requisitos de uma boa interface.
 A maioria dos aplicativos exige interfaces mais
elaboradas e personalizadas.
 Por isto, há muitos componentes GUI Swing no pacote
javax.
 A maioria dos componentes são componentes Java
puros (são escritos, manipulados e exibidos em Java).
 Estes componentes fazerm parte das Java Foundatiton
Classes (JFC) – bibliotecas para desenvolvimentos de
GUI para múltiplas plataformas.
Componentes Swing
 Há dois pacotes básicos que auxiliam na criação de
componentes: java.awt e javax.swing.
 Os componentes java.awt são desenhados conforme a
plataforma de execução.
 Os componentes java.awt dependem da plataforma
local para determinar sua funcionalidade, aparência e
comportamento. São componentes pesados.
 Os componentes javax.swing assumem a mesma
aparência em qualquer plataforma. São componentes
leves.
 A principal hierarquia de classes utilizadas na
construção de GUI é descrita abaixo:
 Object >> Component >> Container >> JComponent
Componentes Swing
 Os componentes derivados de JComponent possui
vários recursos:
 aparência e comportamento plugáveis (personalização
conforme plataforma)
 teclas de atalho (mnemônicos) para acesso direto dos
componentes pelo teclado.
 capacidade de tratamento de eventos
 breve descrição do propósito do componente (dica de
ferramenta)
 suporte para acessibilidade (leitores de tela em braile)
 suporte para localização de interface com o usuário
(diferentes linguas e culturas)
Componentes Swing
 A maioria das janelas podem conter componentes
Swing e são instâncias da classe JFrame ou uma
subclasse de JFrame.
 JFrame é uma subclasse indireta de java.awt.Window e
descende diretamente de java.awt.Frame.
 A classe java.awt.Window fornece atributos e
comportamentos básicos de uma janela.
 barra de título na parte superior
 botões para minimizar, maximizar e fechar a janela.
 Um JLabel (rótulo) fornece um texto que declara a
finalidade de cada componente dentro de uma janela.
Pode exibir apenas texto, uma imagem ou uma
combinação de imagem com texto.
A Janela e seus Componentes
 O gerenciador de layout FlowLayout organiza os
componentes da esquerda para a direita. Sempre
reorganiza os componentes quando as dimensões do
container (JFrame) são alteradas.
 O método setLayout é utilizado para definir qual
gerenciador de layout deve ser utilizado.
 Todos os componentes devem ser adicionados
explicitamente dentro do contêiner.
 Um Icon é um objeto que implementa a interface
javax.swing.Icon. A classe ImageIcon é um exemplo.
 A classe ImageIcon suporta vários formatos de imagem
(GIF, PNG, JPEG).
A Janela e seus Componentes
 A interface javax.swing.SwingConstants declara um
conjunto de constantes que são usadas para muitos
componentes Swing.
 Às vezes, as constantes são utilizadas para auxiliar no
posicionamento dos textos e ícones dentro de um
JLabel.
 SwingConstants.LEFT
 SwingConstants.CENTER
 SwingConstants.RIGTH
 SwingConstants.TOP
 SwingConstants.CENTER
 SwingConstants.BOTTON
A Janela e seus Componentes
 O usuário interage com uma GUI para indicar as
tarefas que devem ser executadas pelo aplicativo.
 As GUIs são baseadas em evento.
 Quando o usuário interage com a GUI gera um evento
que guia o programa na realização de uma tarefa.
 Alguns exemplos de evento:
 clicar em um botão
 digitar em um campo de texto
 selecionar um item do menu
 fechar uma janela
 mover o mouse
Eventos
 A classe JText estende a classe JTextComponent que
fornece muitos recursos comuns aos componentes
baseados em texto.
 A classe JPasswordField estende a classe JTextField e
adiciona métodos de processamento de senhas.
 Ambos os componentes representam uma área de uma
única linha onde o usuário pode inserir um texto.
 Um JPasswordField mostra que caracteres estão sendo
digitados, mas oculta os caracteres reais.
 Quando o usuário digita um texto em um dos
componentes e tecla ENTER um evento ocorre.
 O texto só pode ser digitado para o componente que
estiver em foco.
 Um componente recebe o foco quando o usuário clica no
componente. Isto é importante para capturar
corretamente a origem do evento.
JTextField e JPasswordField
 Uma classe interna normalmente é utilizada para
implementar processadores de eventos (handlers de
evento).
 O objeto de classe interna pode acessar todos os
membros da classe externa.
 Um evento de ação é representado pela classe
java.awt.event.ActionEvent.
 Um evento de ação deve ser processado por um objeto
que implemente a interface
java.awt.event.ActionListener.
 Como o JPasswordField descende de JTextField, ambos
suportam os mesmos eventos.
 Um ouvinte de evento deve implementar a interface
apropriada de ouvinte de evento.
JTextField e JPasswordField
 Muitos tipos diferentes de eventos podem ocorrer quando
o usuário interage com uma GUI.
 As informações de evento são armazenados em um objeto
de uma classe que estende java.awt.AWTEvent.
 Veja a hierarquia de eventos abaixo:
 AWTEVent
 ActionEvent
 AdjustmentEvent
 ItemEvent
 TextEvent
 ComponentEvent
 ContainerEvent
 FocusEvent
 PaintEvent
 WindowEvent
 InputEvent
 KeyEvent
 MouseEvent
 MouseWheelEvent
Tipos de Eventos e Interfaces
 Tipos adicionais de evento específicos dos componentes
Swing são declarados no pacote javax.swing.event.
 Para trabalhar com processamento de eventos precisamos
identificar três elementos.
 a origem do evento (componente GUI com o qual o usuário
interage)
 o objeto do evento (objeto que guarda informações sobre o
evento que ocorreu)
 o ouvinte do evento (objeto que é notificado pela origem quando
um evento ocorre e executa um método em resposta ao evento)
 O processamento de um evento gerado por um objeto
(origem) é delegado a um outro objeto (ouvinte).
 Este modelo é chamado de modelo de delegação de
evento.
 Para cada tipo de evento há uma interface listener de
evento correspondente.
Tipos de Eventos e Interfaces
 Cada interface listener de eventos especifica um ou mais
métodos de tratamento de evento que devem ser
declarados na classe que implementa a interface.
 Cada classe que implementa uma interface deve declarar
(definir o código) todos os métodos dessa interface.
 Cada JComponent tem uma variável de instância
chamada listenerList que referencia um objeto de classe
javax.swing.event.EventListenerList para registrar os
seus ouvintes (listeners).
 Um componente pode ter vários ouvintes registrados para
processar os seus eventos.
 Cada tipo de evento é tratado por uma interface listener
apropriada:
 ActionEvent é tratado por ActionListener
 MouseEvent é tratado por MouseListener e MouseMotionListener
 KeyEvent é tratado por KeyListener
Tipos de Eventos e Interfaces
 A partir do evento, o componente decide qual o tipo de
ouvinte deve receber o evento e qual método deve ser
executado.
 Em um ActionEvent, o evento é despachado para o método
actionPerformed de cada ActionListener registrado.
 Em um MouseEvent, o evento é despachado para cada
MouseListener ou MouseMotionListener registrado, e o
método correto será invocado.
 O componente saberá chamar o método apropriado
para cada evento que ocorre, mas para isto é
necessário que o handler (tratador ou ouvinte) de
evento seja registrado no componente corretamente.
Tipos de Eventos e Interfaces
 Um botão é usado pelo usuário para disparar uma ação
específica por meio de um clique.
 Um aplicativo Java pode usar vários tipos de botões:
 botões de comando
 caixas de seleção
 botões de alternação
 botões de opção
 Veja a hierarquia dos botões derivada do pacote
javax.swing
 JComponent
 AbstractButton
 JButton
 JToggleButton
 JCheckBox
 JRadioButton
Botões de Acão : JButton
 O JButton representa um botão de comando e pode
possuir um texto em sua face (rótulo do botão).
 Um botão de comando gera um ActionEvent quando é
clicado pelo usuário.
 Um JButton pode exibir um Icon.
 Um JButton pode exibir um Icon rollover (exibido
quando o usuário posiciona o mouse sobre o botão).
Botões de Acão : JButton
 Há três tipos de botões de estado:
 JToggleButton,
 JCheckBox
 JRadioButton.
 O JRadioButton é utilizado para representar valores
mutuamente exclusivos.
 O JCheckBox permite a escolha de múltiplos valores
inclusivos.
Botões de Estado: JCheckBox
 Estes botões (JRadioButton) possuem dois estados:
selecionado e não-selecionado.
 O ButtonGroup é utilizado para manter um
relacionamento lógico entre botões de opção.
 O ButtonGroup não é exibido. Ele serve apenas para
agrupar os botões.
 Este tipo de botão é muito útil para permitir a seleção
de itens mutuamente exclusivos.
Botões de Estado: JRadionButton
 Uma caixa de combinação (lista drop-down) permite ao
usuário selecionar um item em uma lista.
 As caixas de combinação são implementadas com a
classe JComboBox que estende JComponent.
 JComboBox gera ItemEvent como JCheckBox e
JRadioButton.
 Uma classe interna anônima tem acesso a todos os
membros da classe externa.
 A classe interna anônima que implementa uma
interface, deve implementar cada método da interface.
Caixa de Combinação: JComboBox
 Uma lista exibe uma séria de itens a partir da qual o
usuário pode selecionar um ou mais itens.
 As listas são criadas com a classe JList, que estende
diretamente a classe JComponent.
 A classe JList suporta listas de uma única seleção ou
listas de seleção múltipla.
Listas : JList
 Há três modos de seleção para uma lista definidos pela
classe ListSelectionModel.
 SINGLE_SELECTION (permite selecionar um item)
 SINGLE_INTERVAL_SELECTION (permite selecionar em um
intervalo contíguo de itens)
 MULTIPLE_INTERVAL_SELECTION (pode selecionar um
intervalo contínuo de itens)
 Uma lista de seleção múltipla permite ao usuário
selecionar muitos itens de uma JList.
Listas : JList
 As interfaces ouvintes de eventos do mouse são:
 MouseListener
 MouseMotionListener
 Os eventos do mouse podem ser capturados por
qualquer component GUI que deriva de
java.awt.Component.
Eventos de Mouse
 O pacote javax.swing.event contém a interface
MouseInputListener que estende as interfaces
MouseListener e MouseMotionListener para criar uma
única interface com todos os métodos.
 Os métodos são chamados quando o mouse interage
com um Component, se objetos listeners de evento
apropriados forem registrados para esse Component.
Eventos de Mouse
 Veja a lista de métodos de MouseListener:
 mousePressed(MouseEvent event) : quando um botão do
mouse é pressionado enquanto o cursor do mouse estiver
sobre um component.
 mouseClicked(MouseEvent event) : quando um botão do
mouse é pressionado e liberado enquanto o cursor do mouse
pairar sobre um componente. Esse evento é sempre precedido
por uma chamada para mousePressed.
Eventos de Mouse
 Veja a lista de métodos de MouseListener:
 mouseReleased(MouseEvent event) : quando um botão do
mouse é liberado depois de ser pressionado. do mouse estiver
sobre um component. Esse evento é sempre precedido por
uma chamada para mousePressed e uma ou mais chamadas
para mouseDragged.
 mouseEntered(MouseEvent event) : quando o cursor do
mouse entra nos limites de um componente.
 mouseExited(MouseEvent event) : quando o curso do mouse
deixa os limites de um componente.
Eventos de Mouse
 Veja a lista de métodos de MouseMotionListener:
 mouseDragged(MouseEvent event) : quando o botão do mouse
é pressionado enquanto o curso do mouse estiver sobre um
componente e o mouse é movido enquanto o botão do mouse
permanecer pressionado. Esse é evento é sempre precedido
por uma chamada de mousePressed. Todos os eventos de
arrastar são enviados para o componente em que o usuário
começoou a arrastar o mouse.
 mouseMoved(MouseEvent event) : quando o mouse é movido
(sem pressionamento de botões) quando o curso do mouse
está sobre um componente. Todos os eventos de movimento
são enviados para o componente sobre o qual o mouse
atualmente está posicionado.
Eventos de Mouse
 Cada método recebe como argumento um objeto
MouseEvent que contém informações sobre o evento de
mouse (incluindo as coordenadas x e y da localização
em que ocorreu o evento).
 Os métodos e as constantes e classe InputEvent
permitem-lhe determinar o botão do mouse em que o
usuário clicou.
 Há também a interface MouseWheelListener que
permite que aplicativos respondam à rotação da roda
de um mouse. Há métodos nesta interface que permite
obter informações sobre a quantidade de rotação da
roda.
Eventos de Mouse
 Muitas interfaces ouvintes (Listener) possuem muitos
métodos.
 Não é sempre desejável implementar todos os métodos
em uma interface ouvinte.
 Por esta razão, o Java fornece classes adaptadoras que
implementa um interface e fornece um implementação
padrão (método vazio) para cada um dos métodos da
interface.
Classes Adaptadores: Adapters
 Segue a lista de algumas classes Adaptadoras com
suas respectivas interfaces.
 ComponentAdapter implementa ComponentListener
 ContainerAdapter implementa ContainerListener
 FocusAdapter implementa FocusListener
 KeyAdapter implementa KeyListener
 MouseAdapter implementa MouseListener
 WindowAdapter implementa WindowListener
Classes Adaptadores: Adapters
 Usando o Adapter, posso estender a classe adaptadora
ao invés de implementar a interface, para tratar os
eventos gerados pelos componentes da GUI.
 A classe MouseEvent herda vários métodos de
InputEvent que podem distinguir os cliques do mouse e
a combinação dos cliques com pressionamento de
teclas do teclado.
Classes Adaptadores: Adapters
 Os componentes leves do Swing que estendem
JComponent contém o método paintComponent que é
chamado quando um componente leve é exibido.
 Este método pode ser sobrescrito para alterar a forma
como o componente deve ser exibido.
 Um componente pode ser opaco ou transparente. O
método setOpaque() controla isto.
 O método da superclasse (JComponent) deve ser
sempre o primeiro a ser chamado no método
paintComponent da subclasse.
 O método repaint() indica que o componente deve ser
atualizado na tela o mais rápido possível.
Paineis : JPanel
 Os eventos do teclado são tratados por uma classe que
implementa KeyListener.
 Eventos de teclado são gerados quando teclas são
pressionadas e liberadas.
 Os métodos keyPressed(), keyReleased() e keyTyped()
recebem um KeyEvent como argumento e definem o
código para tratamento do evento.
 keyPressed() é invocado quando qualquer tecla é pressionada.
 keyTyped() é invocado quando uma tecla que não é de ação é
invocada (home, end, setas, etc).
 keyReleased() é chamado quando a tecla é lançada após um
dos métodos anteriores.
Eventos do Teclado
 Os gerenciadores de layout organizam os componentes
GUI em um contêiner para propósito de apresentação.
 Os gerenciadores ajudam a organizar os elementos
definindo de forma automática as dimensões e posição
de cada componente.
 Todos os gerenciadores de layout implementam a
interface java.awt.LayoutManager.
 O método setLayout() da classe Container aceita um
objeto que implementa a interface LayoutManager como
argumento.
Gerenciadores de Layout
 Há basicamente três maneiras de organizar
componentes em uma GUI.
 Posicionamento absoluto: você pode configurar o layout com
null e utilizar os métodos setSize e setLocation ou setBounds
para configurar cada componente. É mais trabalhoso.
 Gerenciadores de layout: posiciona os elementos de forma
mais simples e rápida, mas perdemos um pouco o controle
sobre as dimensões e posicionamento dos elementos.
 Posicionamento visual em uma IDE: algumas IDEs fornecem
ferramentas para construir layout com arrastar-e-soltar.
Além disto, é possível programar os eventos usando clique
duplo sobre os componentes. Neste caso, a IDE gera o código
Java necessário. A IDE fornece um controle bom sobre
posição, tamanho e alinhamento dos elementos.
Gerenciadores de Layout
 Há vários gerenciadores de layout. Neste momento
focaremos em apenas três deles:
 FlowLayout : todos os componentes são colocados em
sequência da esquerda para a direita na ordem em que foram
adicionados. É o padrão para JPanel.
 BorderLayout: organiza os componentes em cinco áreas:
NORTH, SOUTH, EAST, WEST, CENTER. É o padrão para
JFrame.
 GridLayout: organiza os componentes em linhas e colunas.
Gerenciadores de Layout
 É o gerenciador mais simples. Os componentes são
colocados no contêiner da esquerda para a direita na
ordem em que foram adicionados.
Gerenciador FlowLayout
 Organiza os componentes em cinco regiões do contêiner
e implementa a interface LayoutManager2.
 Limita o contêiner a possuir apenas cinco elementos:
um por região.
 O componente colocado na região pode ser outro
container que contenha outros componentes.
 As regiões se expandem de acordo com as
características dos componentes inseridos nelas.
Gerenciador BorderLayout
 A ausência de um componente em um região faz com
que a outra região se expanda para ocupar a área da
região vazia.
 Se nenhuma região for indicada o componente será
adicionado ao centro.
 Se mais de um componente for inserido em uma região,
apenas o último inserido será exibido.
Gerenciador BorderLayout
 Divide o contêiner em uma grade.
 A grade possui linha e colunas.
 Todos os componentes da grade tem a mesma altura e
largura.
 Cada componente é inserido em uma célula da grade.
Gerenciador GridLayout
 Uma GUI complexa exige que cada componente seja
colocado em um local exato.
 Estas GUIs, frequentemente, são formadas por
múltiplos painéis com os componentes de cada painel
organizados em layout específico.
 A classe JPanel estende JComponent, e JComponent
estende JContainer, então todo JPanel é um Conteiner.
Layouts Complexos
 Por isto, todo JPanel pode possuir outros componentes,
inclusive outros JPanels com o método add().
 O JPanel não tem um painel de conteúdo como um
JFrame. Neste caso, os componentes são inseridos
diretamente no JPanel.
 O painel é redimensionado de acordo com as dimensões
dos componentes inseridos nele.
Layouts Complexos
 Um JText fornece uma área para manipular múltiplas
linhas de texto. É uma subclasse de JComponent.
 Um JText não possui eventos de ação. A tecla ENTER
provoca uma quebra de linha dentro do componente.
 Um evento externo de outro componente deve ser
utilizado para provocar alguma ação com o conteúdo
do JText.
Áreas de Texto : JText
 Um JScrollPane fornece barras de rolagem para
componentes.
 Um JScrollPane pode utilizar algumas constantes para
definir se e quando as barras de rolagem devem
aparecer.
 JScrollPane.VERTICAL_SCROLLBAR_ALWAYS
 JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS
 JScrollPane.VERTICAL_SCROLLBAR_NEEDED
 JScrollPane.HORIZONTAL_SCROLLBAR_NEEDED
 JScrollPane.VERTICAL_SCROLLBAR_NEVER
 JScrollPane.HORIZONTAL_SCROLLBAR_NEVER
Áreas de Rolagem : JScrollPane
 Controles deslizantes permitem selecionar a partir de
um intervalo de valores de números inteiros.
 Um JSlider horizontal com marcas de medidas e um
marcador que permitem a um usuário selecionar um
valor.
 JSliders podem ser personalizados para exibir marcas
de medida principais, marcas de medida secundárias e
rótulos para as marcas de medida.
 Os JSliders geram ChangeEvents em resposta a
interações de usuário.
 Um objeto de uma classe que implementa a interface
ChangeListener deve declarar o método stateChanged
pode responder a ChangeEvents.
Controle Deslizante : JSlider
 Um JFrame é uma janela com uma barra de título e
uma borda.
 A classe JFrame é uma subclasse de Frame. Frame é
uma subclasse de Window.
 Uma janela gerada pelo JFrame é exibida conforme o
padrão de janelas do sistema operacional em uso.
 Por padrão, quando o usuário fecha uma janela
JFrame, ela se torna oculta, mas é possível controlar
isto com o método setDefaultCloseOperation().
Janelas : JFrame
 A interface WindowConstants que a classe JFrame
implementa fornece constantes que podem ser
utilizadas para definir o que deve ser feito com a janela
quando o usuário fechá-la.
 DISPOSE_ON_CLOSE (descartada pelo sistema)
 DO_NOTHING_ON_CLOSE (o programa decidirá o que deve
ser feito)
 HIDE_ON_CLOSE (a janela ficará oculta)
Janelas : JFrame
 A janela só é exibida quando o método setVisible() é
invocado com o argumento true.
 O tamanho da janela pode ser configurado com o
método setSize() e a localização com o setLocation().
 Quando a janela é manipulada pelo usuário, alguns
eventos são gerados (WindowEvent).
 Os ouvintes de eventos são registrados com o método
addWindowListener.
Janelas : JFrame
 A interface WindowListener fornece sete métodos para
tratamento dos eventos da janela.
 windowActivated : chamado quando o quando o usuário
torna uma janela ativa.
 windowClosed : chamado logo depois de a janela ser fechada.
 windowClosing: chamado quando o usuário inicia o
fechamento da janela
 windowDeactivated: chamado quando o usuário torna outra
janela a janela ativa.
 windowDeiconified: chamado quando o usuário restaura a
janela que está minimizada.
 windowIconified: chamado quando o usuário minimiza a
janela.
 windowOpened: chamado quando um programa exibe uma
janela pela primeira vez.
Janelas : JFrame
 Os menus permitem que o usuário realiza ações sem
poluir desnecessariamente uma GUI com componentes
extras.
 Os menus podem ser anexados somente aos objetos das
classes que fornecem o método setJMenuBar.
 Duas dessas classes são JFrame e JApplet.
 As classes utilizadas para declarar menus são:
JMenuBar, JMenu, JMenuITem, JCheckBoxMenuItem,
JRadioButtonMenuItem.
Menus : JMenuBar e JMenu
 A classe JMenuBar possui métodos para gerenciar uma
barra de menus (conteiner de menus).
 A classe JMenu possui métodos para gerenciar menus.
 Os menus contém itens de menu e são adicionados a
barras de menus ou a outros menus (submenus).
 Quando um menu é clicado, ele se expande para
mostrar sua lista dos itens de menu.
 A classe JMenuITem contém os métodos para gerenciar
itens de menu.
 Quando um item de menu é selecionado resulta em um
evento de ação.
Menus : JMenuBar e JMenu
 A classe JCheckBoxMenuItem contém métodos para
gerenciar itens de menu que podem ser ativados ou
desativados.
 Uma marca de verificação indica que um item deste tipo
menu foi ativado.
 A classe JRadioButtonMenuItem contém métodos
necessários para gerenciar itens de menu que podem
ser ativados ou desativados.
 Um círculo aparece para indicar que um item deste tipo de
menu foi ativado.
Menus : JMenuBar e JMenu
 Alguns aplicativos fornecem menus pop-up sensíveis ao
contexto.
 No Swing, esses menus são criados com a classe
JPopupMenu.
 Esses menus fornecem opções que são específicas do
componente pelo qual o evento de gatilho pop-up foi
gerado.
 Normalmente, o evento de acionamento pop-up ocorre
quando o usuário pressiona e libera o botão direito do
mouse.
Menu de Contexto : JPopupMenu
 Um programa que utiliza componentes AWT do Java
assume a aparência e o comportamento da plataforma
em que o programa executa.
 Às vezes, isto é desejável porque permite que usuários
do aplicativo em cada plataforma utilizem componentes
com os quais eles já estão acostumados.
 Com o Swing podemos personalizar a aparência e o
comportamento da interface.
Aparência e Comportamento Plugáveis
 Muitos aplicativos utilizam uma interface de múltiplos
documentos (Multiple-Document Interface).
 Estes aplicativos tem uma janela principal (janela-pai)
e outras janelas (janelas-filhas), para gerenciar vários
documentos abertos e que estão sendo processados em
paralelo.
 Um processador de texto e um programa de correio
eletrônico são exemplos de aplicativos MDI.
 As classes JDesktopPane e JInternalFrame são
utilizadas para construir interfaces MDI.
Interface de Múltiplos Documentos
 Um JTabbedFrame organiza componentes GUI em
camadas, das quais somente uma é visível por vez.
 Os usuários acessam cada camada via uma guia –
semelhante a pastas em um gabinete de arquivos.
 Quando o usuário clica na guia a camada é exibida.
Camadas : JTabbedFrame
 Este gerenciador (BoxLayout) organiza os componentes
GUI horizontalmente ao longo do eixo x ou
verticalmente ao longo do eixo y de um contêiner.
 É semelhante ao GridLayout, mas permite que os
componentes organizados na grade variem em tamanho
e sejam adicionados em qualquer ordem.
 Este componente é muito complexo e muito poderoso.
 Vale a pena consultar a documentação para aprender
de forma objetiva a utilização deste gerenciador.
 O GridBagConstraints especifica como um componente
é inserido em um GridBagLayout.
Gerenciador BoxLayout
gabriel.filho@uneb.com.br
Dúvidas e Observações

Apresentação-Resumo sobre o Java Swing.

  • 1.
  • 2.
  • 3.
     Uma interfacegráfica (GUI) apresenta um mecanismo amigável ao usuário para interagir com um aplicativo.  Uma GUI dá ao aplicativo uma aparência e comportamento distintos.  Uma boa interface facilita o aprendizado e utilização do aplicativo pelo usuário.  As GUI são construídas a partir de componentes GUI.  Um componente GUI é um objeto que permite ao usuário interagir via mouse, teclado, formulário, reconhecimento de voz, etc.  Muitas IDEs fornecem ferramentas de projeto GUI para facilitar a construção da interface. Introdução
  • 4.
     É possívelutilizar uma caixa de diálogo para interagir com o usuário.  A caixa de diálogo é utilizada para receber informações do usuário ou exibir informações para o usuário.  A classe JOptionPane do pacote javax.swing fornece caixas de diálogos pré-construídas tanto para entrada como para saída.  Esses diálogos são exibidos invocando métodos JOptionPane static.  Uma caixa de diálogo modal só deve ser usada quando for necessário impedir usuários de interagir com um restante de um aplicativo até que eles descartem o diálogo.  Não é necessário a criação de um objeto para utilizar os métodos showInputDialog, showMessageDialog e parseInt. São métodos invocados a partir da classe. JOptionPane
  • 5.
     Somente ascaixas de diálogo não atendem todos os requisitos de uma boa interface.  A maioria dos aplicativos exige interfaces mais elaboradas e personalizadas.  Por isto, há muitos componentes GUI Swing no pacote javax.  A maioria dos componentes são componentes Java puros (são escritos, manipulados e exibidos em Java).  Estes componentes fazerm parte das Java Foundatiton Classes (JFC) – bibliotecas para desenvolvimentos de GUI para múltiplas plataformas. Componentes Swing
  • 6.
     Há doispacotes básicos que auxiliam na criação de componentes: java.awt e javax.swing.  Os componentes java.awt são desenhados conforme a plataforma de execução.  Os componentes java.awt dependem da plataforma local para determinar sua funcionalidade, aparência e comportamento. São componentes pesados.  Os componentes javax.swing assumem a mesma aparência em qualquer plataforma. São componentes leves.  A principal hierarquia de classes utilizadas na construção de GUI é descrita abaixo:  Object >> Component >> Container >> JComponent Componentes Swing
  • 7.
     Os componentesderivados de JComponent possui vários recursos:  aparência e comportamento plugáveis (personalização conforme plataforma)  teclas de atalho (mnemônicos) para acesso direto dos componentes pelo teclado.  capacidade de tratamento de eventos  breve descrição do propósito do componente (dica de ferramenta)  suporte para acessibilidade (leitores de tela em braile)  suporte para localização de interface com o usuário (diferentes linguas e culturas) Componentes Swing
  • 8.
     A maioriadas janelas podem conter componentes Swing e são instâncias da classe JFrame ou uma subclasse de JFrame.  JFrame é uma subclasse indireta de java.awt.Window e descende diretamente de java.awt.Frame.  A classe java.awt.Window fornece atributos e comportamentos básicos de uma janela.  barra de título na parte superior  botões para minimizar, maximizar e fechar a janela.  Um JLabel (rótulo) fornece um texto que declara a finalidade de cada componente dentro de uma janela. Pode exibir apenas texto, uma imagem ou uma combinação de imagem com texto. A Janela e seus Componentes
  • 9.
     O gerenciadorde layout FlowLayout organiza os componentes da esquerda para a direita. Sempre reorganiza os componentes quando as dimensões do container (JFrame) são alteradas.  O método setLayout é utilizado para definir qual gerenciador de layout deve ser utilizado.  Todos os componentes devem ser adicionados explicitamente dentro do contêiner.  Um Icon é um objeto que implementa a interface javax.swing.Icon. A classe ImageIcon é um exemplo.  A classe ImageIcon suporta vários formatos de imagem (GIF, PNG, JPEG). A Janela e seus Componentes
  • 10.
     A interfacejavax.swing.SwingConstants declara um conjunto de constantes que são usadas para muitos componentes Swing.  Às vezes, as constantes são utilizadas para auxiliar no posicionamento dos textos e ícones dentro de um JLabel.  SwingConstants.LEFT  SwingConstants.CENTER  SwingConstants.RIGTH  SwingConstants.TOP  SwingConstants.CENTER  SwingConstants.BOTTON A Janela e seus Componentes
  • 11.
     O usuáriointerage com uma GUI para indicar as tarefas que devem ser executadas pelo aplicativo.  As GUIs são baseadas em evento.  Quando o usuário interage com a GUI gera um evento que guia o programa na realização de uma tarefa.  Alguns exemplos de evento:  clicar em um botão  digitar em um campo de texto  selecionar um item do menu  fechar uma janela  mover o mouse Eventos
  • 12.
     A classeJText estende a classe JTextComponent que fornece muitos recursos comuns aos componentes baseados em texto.  A classe JPasswordField estende a classe JTextField e adiciona métodos de processamento de senhas.  Ambos os componentes representam uma área de uma única linha onde o usuário pode inserir um texto.  Um JPasswordField mostra que caracteres estão sendo digitados, mas oculta os caracteres reais.  Quando o usuário digita um texto em um dos componentes e tecla ENTER um evento ocorre.  O texto só pode ser digitado para o componente que estiver em foco.  Um componente recebe o foco quando o usuário clica no componente. Isto é importante para capturar corretamente a origem do evento. JTextField e JPasswordField
  • 13.
     Uma classeinterna normalmente é utilizada para implementar processadores de eventos (handlers de evento).  O objeto de classe interna pode acessar todos os membros da classe externa.  Um evento de ação é representado pela classe java.awt.event.ActionEvent.  Um evento de ação deve ser processado por um objeto que implemente a interface java.awt.event.ActionListener.  Como o JPasswordField descende de JTextField, ambos suportam os mesmos eventos.  Um ouvinte de evento deve implementar a interface apropriada de ouvinte de evento. JTextField e JPasswordField
  • 14.
     Muitos tiposdiferentes de eventos podem ocorrer quando o usuário interage com uma GUI.  As informações de evento são armazenados em um objeto de uma classe que estende java.awt.AWTEvent.  Veja a hierarquia de eventos abaixo:  AWTEVent  ActionEvent  AdjustmentEvent  ItemEvent  TextEvent  ComponentEvent  ContainerEvent  FocusEvent  PaintEvent  WindowEvent  InputEvent  KeyEvent  MouseEvent  MouseWheelEvent Tipos de Eventos e Interfaces
  • 15.
     Tipos adicionaisde evento específicos dos componentes Swing são declarados no pacote javax.swing.event.  Para trabalhar com processamento de eventos precisamos identificar três elementos.  a origem do evento (componente GUI com o qual o usuário interage)  o objeto do evento (objeto que guarda informações sobre o evento que ocorreu)  o ouvinte do evento (objeto que é notificado pela origem quando um evento ocorre e executa um método em resposta ao evento)  O processamento de um evento gerado por um objeto (origem) é delegado a um outro objeto (ouvinte).  Este modelo é chamado de modelo de delegação de evento.  Para cada tipo de evento há uma interface listener de evento correspondente. Tipos de Eventos e Interfaces
  • 16.
     Cada interfacelistener de eventos especifica um ou mais métodos de tratamento de evento que devem ser declarados na classe que implementa a interface.  Cada classe que implementa uma interface deve declarar (definir o código) todos os métodos dessa interface.  Cada JComponent tem uma variável de instância chamada listenerList que referencia um objeto de classe javax.swing.event.EventListenerList para registrar os seus ouvintes (listeners).  Um componente pode ter vários ouvintes registrados para processar os seus eventos.  Cada tipo de evento é tratado por uma interface listener apropriada:  ActionEvent é tratado por ActionListener  MouseEvent é tratado por MouseListener e MouseMotionListener  KeyEvent é tratado por KeyListener Tipos de Eventos e Interfaces
  • 17.
     A partirdo evento, o componente decide qual o tipo de ouvinte deve receber o evento e qual método deve ser executado.  Em um ActionEvent, o evento é despachado para o método actionPerformed de cada ActionListener registrado.  Em um MouseEvent, o evento é despachado para cada MouseListener ou MouseMotionListener registrado, e o método correto será invocado.  O componente saberá chamar o método apropriado para cada evento que ocorre, mas para isto é necessário que o handler (tratador ou ouvinte) de evento seja registrado no componente corretamente. Tipos de Eventos e Interfaces
  • 18.
     Um botãoé usado pelo usuário para disparar uma ação específica por meio de um clique.  Um aplicativo Java pode usar vários tipos de botões:  botões de comando  caixas de seleção  botões de alternação  botões de opção  Veja a hierarquia dos botões derivada do pacote javax.swing  JComponent  AbstractButton  JButton  JToggleButton  JCheckBox  JRadioButton Botões de Acão : JButton
  • 19.
     O JButtonrepresenta um botão de comando e pode possuir um texto em sua face (rótulo do botão).  Um botão de comando gera um ActionEvent quando é clicado pelo usuário.  Um JButton pode exibir um Icon.  Um JButton pode exibir um Icon rollover (exibido quando o usuário posiciona o mouse sobre o botão). Botões de Acão : JButton
  • 20.
     Há trêstipos de botões de estado:  JToggleButton,  JCheckBox  JRadioButton.  O JRadioButton é utilizado para representar valores mutuamente exclusivos.  O JCheckBox permite a escolha de múltiplos valores inclusivos. Botões de Estado: JCheckBox
  • 21.
     Estes botões(JRadioButton) possuem dois estados: selecionado e não-selecionado.  O ButtonGroup é utilizado para manter um relacionamento lógico entre botões de opção.  O ButtonGroup não é exibido. Ele serve apenas para agrupar os botões.  Este tipo de botão é muito útil para permitir a seleção de itens mutuamente exclusivos. Botões de Estado: JRadionButton
  • 22.
     Uma caixade combinação (lista drop-down) permite ao usuário selecionar um item em uma lista.  As caixas de combinação são implementadas com a classe JComboBox que estende JComponent.  JComboBox gera ItemEvent como JCheckBox e JRadioButton.  Uma classe interna anônima tem acesso a todos os membros da classe externa.  A classe interna anônima que implementa uma interface, deve implementar cada método da interface. Caixa de Combinação: JComboBox
  • 23.
     Uma listaexibe uma séria de itens a partir da qual o usuário pode selecionar um ou mais itens.  As listas são criadas com a classe JList, que estende diretamente a classe JComponent.  A classe JList suporta listas de uma única seleção ou listas de seleção múltipla. Listas : JList
  • 24.
     Há trêsmodos de seleção para uma lista definidos pela classe ListSelectionModel.  SINGLE_SELECTION (permite selecionar um item)  SINGLE_INTERVAL_SELECTION (permite selecionar em um intervalo contíguo de itens)  MULTIPLE_INTERVAL_SELECTION (pode selecionar um intervalo contínuo de itens)  Uma lista de seleção múltipla permite ao usuário selecionar muitos itens de uma JList. Listas : JList
  • 25.
     As interfacesouvintes de eventos do mouse são:  MouseListener  MouseMotionListener  Os eventos do mouse podem ser capturados por qualquer component GUI que deriva de java.awt.Component. Eventos de Mouse
  • 26.
     O pacotejavax.swing.event contém a interface MouseInputListener que estende as interfaces MouseListener e MouseMotionListener para criar uma única interface com todos os métodos.  Os métodos são chamados quando o mouse interage com um Component, se objetos listeners de evento apropriados forem registrados para esse Component. Eventos de Mouse
  • 27.
     Veja alista de métodos de MouseListener:  mousePressed(MouseEvent event) : quando um botão do mouse é pressionado enquanto o cursor do mouse estiver sobre um component.  mouseClicked(MouseEvent event) : quando um botão do mouse é pressionado e liberado enquanto o cursor do mouse pairar sobre um componente. Esse evento é sempre precedido por uma chamada para mousePressed. Eventos de Mouse
  • 28.
     Veja alista de métodos de MouseListener:  mouseReleased(MouseEvent event) : quando um botão do mouse é liberado depois de ser pressionado. do mouse estiver sobre um component. Esse evento é sempre precedido por uma chamada para mousePressed e uma ou mais chamadas para mouseDragged.  mouseEntered(MouseEvent event) : quando o cursor do mouse entra nos limites de um componente.  mouseExited(MouseEvent event) : quando o curso do mouse deixa os limites de um componente. Eventos de Mouse
  • 29.
     Veja alista de métodos de MouseMotionListener:  mouseDragged(MouseEvent event) : quando o botão do mouse é pressionado enquanto o curso do mouse estiver sobre um componente e o mouse é movido enquanto o botão do mouse permanecer pressionado. Esse é evento é sempre precedido por uma chamada de mousePressed. Todos os eventos de arrastar são enviados para o componente em que o usuário começoou a arrastar o mouse.  mouseMoved(MouseEvent event) : quando o mouse é movido (sem pressionamento de botões) quando o curso do mouse está sobre um componente. Todos os eventos de movimento são enviados para o componente sobre o qual o mouse atualmente está posicionado. Eventos de Mouse
  • 30.
     Cada métodorecebe como argumento um objeto MouseEvent que contém informações sobre o evento de mouse (incluindo as coordenadas x e y da localização em que ocorreu o evento).  Os métodos e as constantes e classe InputEvent permitem-lhe determinar o botão do mouse em que o usuário clicou.  Há também a interface MouseWheelListener que permite que aplicativos respondam à rotação da roda de um mouse. Há métodos nesta interface que permite obter informações sobre a quantidade de rotação da roda. Eventos de Mouse
  • 31.
     Muitas interfacesouvintes (Listener) possuem muitos métodos.  Não é sempre desejável implementar todos os métodos em uma interface ouvinte.  Por esta razão, o Java fornece classes adaptadoras que implementa um interface e fornece um implementação padrão (método vazio) para cada um dos métodos da interface. Classes Adaptadores: Adapters
  • 32.
     Segue alista de algumas classes Adaptadoras com suas respectivas interfaces.  ComponentAdapter implementa ComponentListener  ContainerAdapter implementa ContainerListener  FocusAdapter implementa FocusListener  KeyAdapter implementa KeyListener  MouseAdapter implementa MouseListener  WindowAdapter implementa WindowListener Classes Adaptadores: Adapters
  • 33.
     Usando oAdapter, posso estender a classe adaptadora ao invés de implementar a interface, para tratar os eventos gerados pelos componentes da GUI.  A classe MouseEvent herda vários métodos de InputEvent que podem distinguir os cliques do mouse e a combinação dos cliques com pressionamento de teclas do teclado. Classes Adaptadores: Adapters
  • 34.
     Os componentesleves do Swing que estendem JComponent contém o método paintComponent que é chamado quando um componente leve é exibido.  Este método pode ser sobrescrito para alterar a forma como o componente deve ser exibido.  Um componente pode ser opaco ou transparente. O método setOpaque() controla isto.  O método da superclasse (JComponent) deve ser sempre o primeiro a ser chamado no método paintComponent da subclasse.  O método repaint() indica que o componente deve ser atualizado na tela o mais rápido possível. Paineis : JPanel
  • 35.
     Os eventosdo teclado são tratados por uma classe que implementa KeyListener.  Eventos de teclado são gerados quando teclas são pressionadas e liberadas.  Os métodos keyPressed(), keyReleased() e keyTyped() recebem um KeyEvent como argumento e definem o código para tratamento do evento.  keyPressed() é invocado quando qualquer tecla é pressionada.  keyTyped() é invocado quando uma tecla que não é de ação é invocada (home, end, setas, etc).  keyReleased() é chamado quando a tecla é lançada após um dos métodos anteriores. Eventos do Teclado
  • 36.
     Os gerenciadoresde layout organizam os componentes GUI em um contêiner para propósito de apresentação.  Os gerenciadores ajudam a organizar os elementos definindo de forma automática as dimensões e posição de cada componente.  Todos os gerenciadores de layout implementam a interface java.awt.LayoutManager.  O método setLayout() da classe Container aceita um objeto que implementa a interface LayoutManager como argumento. Gerenciadores de Layout
  • 37.
     Há basicamentetrês maneiras de organizar componentes em uma GUI.  Posicionamento absoluto: você pode configurar o layout com null e utilizar os métodos setSize e setLocation ou setBounds para configurar cada componente. É mais trabalhoso.  Gerenciadores de layout: posiciona os elementos de forma mais simples e rápida, mas perdemos um pouco o controle sobre as dimensões e posicionamento dos elementos.  Posicionamento visual em uma IDE: algumas IDEs fornecem ferramentas para construir layout com arrastar-e-soltar. Além disto, é possível programar os eventos usando clique duplo sobre os componentes. Neste caso, a IDE gera o código Java necessário. A IDE fornece um controle bom sobre posição, tamanho e alinhamento dos elementos. Gerenciadores de Layout
  • 38.
     Há váriosgerenciadores de layout. Neste momento focaremos em apenas três deles:  FlowLayout : todos os componentes são colocados em sequência da esquerda para a direita na ordem em que foram adicionados. É o padrão para JPanel.  BorderLayout: organiza os componentes em cinco áreas: NORTH, SOUTH, EAST, WEST, CENTER. É o padrão para JFrame.  GridLayout: organiza os componentes em linhas e colunas. Gerenciadores de Layout
  • 39.
     É ogerenciador mais simples. Os componentes são colocados no contêiner da esquerda para a direita na ordem em que foram adicionados. Gerenciador FlowLayout
  • 40.
     Organiza oscomponentes em cinco regiões do contêiner e implementa a interface LayoutManager2.  Limita o contêiner a possuir apenas cinco elementos: um por região.  O componente colocado na região pode ser outro container que contenha outros componentes.  As regiões se expandem de acordo com as características dos componentes inseridos nelas. Gerenciador BorderLayout
  • 41.
     A ausênciade um componente em um região faz com que a outra região se expanda para ocupar a área da região vazia.  Se nenhuma região for indicada o componente será adicionado ao centro.  Se mais de um componente for inserido em uma região, apenas o último inserido será exibido. Gerenciador BorderLayout
  • 42.
     Divide ocontêiner em uma grade.  A grade possui linha e colunas.  Todos os componentes da grade tem a mesma altura e largura.  Cada componente é inserido em uma célula da grade. Gerenciador GridLayout
  • 43.
     Uma GUIcomplexa exige que cada componente seja colocado em um local exato.  Estas GUIs, frequentemente, são formadas por múltiplos painéis com os componentes de cada painel organizados em layout específico.  A classe JPanel estende JComponent, e JComponent estende JContainer, então todo JPanel é um Conteiner. Layouts Complexos
  • 44.
     Por isto,todo JPanel pode possuir outros componentes, inclusive outros JPanels com o método add().  O JPanel não tem um painel de conteúdo como um JFrame. Neste caso, os componentes são inseridos diretamente no JPanel.  O painel é redimensionado de acordo com as dimensões dos componentes inseridos nele. Layouts Complexos
  • 45.
     Um JTextfornece uma área para manipular múltiplas linhas de texto. É uma subclasse de JComponent.  Um JText não possui eventos de ação. A tecla ENTER provoca uma quebra de linha dentro do componente.  Um evento externo de outro componente deve ser utilizado para provocar alguma ação com o conteúdo do JText. Áreas de Texto : JText
  • 46.
     Um JScrollPanefornece barras de rolagem para componentes.  Um JScrollPane pode utilizar algumas constantes para definir se e quando as barras de rolagem devem aparecer.  JScrollPane.VERTICAL_SCROLLBAR_ALWAYS  JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS  JScrollPane.VERTICAL_SCROLLBAR_NEEDED  JScrollPane.HORIZONTAL_SCROLLBAR_NEEDED  JScrollPane.VERTICAL_SCROLLBAR_NEVER  JScrollPane.HORIZONTAL_SCROLLBAR_NEVER Áreas de Rolagem : JScrollPane
  • 47.
     Controles deslizantespermitem selecionar a partir de um intervalo de valores de números inteiros.  Um JSlider horizontal com marcas de medidas e um marcador que permitem a um usuário selecionar um valor.  JSliders podem ser personalizados para exibir marcas de medida principais, marcas de medida secundárias e rótulos para as marcas de medida.  Os JSliders geram ChangeEvents em resposta a interações de usuário.  Um objeto de uma classe que implementa a interface ChangeListener deve declarar o método stateChanged pode responder a ChangeEvents. Controle Deslizante : JSlider
  • 48.
     Um JFrameé uma janela com uma barra de título e uma borda.  A classe JFrame é uma subclasse de Frame. Frame é uma subclasse de Window.  Uma janela gerada pelo JFrame é exibida conforme o padrão de janelas do sistema operacional em uso.  Por padrão, quando o usuário fecha uma janela JFrame, ela se torna oculta, mas é possível controlar isto com o método setDefaultCloseOperation(). Janelas : JFrame
  • 49.
     A interfaceWindowConstants que a classe JFrame implementa fornece constantes que podem ser utilizadas para definir o que deve ser feito com a janela quando o usuário fechá-la.  DISPOSE_ON_CLOSE (descartada pelo sistema)  DO_NOTHING_ON_CLOSE (o programa decidirá o que deve ser feito)  HIDE_ON_CLOSE (a janela ficará oculta) Janelas : JFrame
  • 50.
     A janelasó é exibida quando o método setVisible() é invocado com o argumento true.  O tamanho da janela pode ser configurado com o método setSize() e a localização com o setLocation().  Quando a janela é manipulada pelo usuário, alguns eventos são gerados (WindowEvent).  Os ouvintes de eventos são registrados com o método addWindowListener. Janelas : JFrame
  • 51.
     A interfaceWindowListener fornece sete métodos para tratamento dos eventos da janela.  windowActivated : chamado quando o quando o usuário torna uma janela ativa.  windowClosed : chamado logo depois de a janela ser fechada.  windowClosing: chamado quando o usuário inicia o fechamento da janela  windowDeactivated: chamado quando o usuário torna outra janela a janela ativa.  windowDeiconified: chamado quando o usuário restaura a janela que está minimizada.  windowIconified: chamado quando o usuário minimiza a janela.  windowOpened: chamado quando um programa exibe uma janela pela primeira vez. Janelas : JFrame
  • 52.
     Os menuspermitem que o usuário realiza ações sem poluir desnecessariamente uma GUI com componentes extras.  Os menus podem ser anexados somente aos objetos das classes que fornecem o método setJMenuBar.  Duas dessas classes são JFrame e JApplet.  As classes utilizadas para declarar menus são: JMenuBar, JMenu, JMenuITem, JCheckBoxMenuItem, JRadioButtonMenuItem. Menus : JMenuBar e JMenu
  • 53.
     A classeJMenuBar possui métodos para gerenciar uma barra de menus (conteiner de menus).  A classe JMenu possui métodos para gerenciar menus.  Os menus contém itens de menu e são adicionados a barras de menus ou a outros menus (submenus).  Quando um menu é clicado, ele se expande para mostrar sua lista dos itens de menu.  A classe JMenuITem contém os métodos para gerenciar itens de menu.  Quando um item de menu é selecionado resulta em um evento de ação. Menus : JMenuBar e JMenu
  • 54.
     A classeJCheckBoxMenuItem contém métodos para gerenciar itens de menu que podem ser ativados ou desativados.  Uma marca de verificação indica que um item deste tipo menu foi ativado.  A classe JRadioButtonMenuItem contém métodos necessários para gerenciar itens de menu que podem ser ativados ou desativados.  Um círculo aparece para indicar que um item deste tipo de menu foi ativado. Menus : JMenuBar e JMenu
  • 55.
     Alguns aplicativosfornecem menus pop-up sensíveis ao contexto.  No Swing, esses menus são criados com a classe JPopupMenu.  Esses menus fornecem opções que são específicas do componente pelo qual o evento de gatilho pop-up foi gerado.  Normalmente, o evento de acionamento pop-up ocorre quando o usuário pressiona e libera o botão direito do mouse. Menu de Contexto : JPopupMenu
  • 56.
     Um programaque utiliza componentes AWT do Java assume a aparência e o comportamento da plataforma em que o programa executa.  Às vezes, isto é desejável porque permite que usuários do aplicativo em cada plataforma utilizem componentes com os quais eles já estão acostumados.  Com o Swing podemos personalizar a aparência e o comportamento da interface. Aparência e Comportamento Plugáveis
  • 57.
     Muitos aplicativosutilizam uma interface de múltiplos documentos (Multiple-Document Interface).  Estes aplicativos tem uma janela principal (janela-pai) e outras janelas (janelas-filhas), para gerenciar vários documentos abertos e que estão sendo processados em paralelo.  Um processador de texto e um programa de correio eletrônico são exemplos de aplicativos MDI.  As classes JDesktopPane e JInternalFrame são utilizadas para construir interfaces MDI. Interface de Múltiplos Documentos
  • 58.
     Um JTabbedFrameorganiza componentes GUI em camadas, das quais somente uma é visível por vez.  Os usuários acessam cada camada via uma guia – semelhante a pastas em um gabinete de arquivos.  Quando o usuário clica na guia a camada é exibida. Camadas : JTabbedFrame
  • 59.
     Este gerenciador(BoxLayout) organiza os componentes GUI horizontalmente ao longo do eixo x ou verticalmente ao longo do eixo y de um contêiner.  É semelhante ao GridLayout, mas permite que os componentes organizados na grade variem em tamanho e sejam adicionados em qualquer ordem.  Este componente é muito complexo e muito poderoso.  Vale a pena consultar a documentação para aprender de forma objetiva a utilização deste gerenciador.  O GridBagConstraints especifica como um componente é inserido em um GridBagLayout. Gerenciador BoxLayout
  • 60.