construção de interfaces gráficas -...

73
Construção de Interfaces Gráficas - Introdução Programação Orientada a Objetos Java Prof. Geraldo Braz Junior

Upload: vuonghuong

Post on 09-Nov-2018

220 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Construção de Interfaces Gráficas - Introdução

Programação Orientada a Objetos Java

Prof. Geraldo Braz Junior

Page 2: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Objetivos

Apresentar

Os fundamentos da construção GUI em Java

Modelo de Eventos AWT

Biblioteca de Componentes Swing

2

Page 3: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a
Page 4: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Introdução Interface gráfica é composta de:

Componentes

Recipientes (Containers)

Layout

Eventos

4

Page 5: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Recipientes e Componentes

Componentes, controles ou widgets são os aspectos

visíveis de uma GUI, como botões, menus, caixas de

textos

São colocados dentro de recipientes (containers).

Os recipientes podem conter:

Um ou mais componentes,

assim como outros

recipientes

Importante para

construção

de layouts de

complexidade realista

5

Page 6: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

AWT versus Swing A Abstract Window Toolkit (AWT) é o antigo

conjunto de ferramentas para interfaces

gráficas do Java

Oferece uma infra-estrutura mínima de

interface gráfica

Componentes têm aparência dependente de

plataforma

Limitado em recursos devido a depender de

suporte de cada plataforma para os

componentes oferecidos

Bugs e incompatibilidades entre

plataformas6

Page 7: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

AWT versus Swing O swing não é um substituto completo do

AWT, mas fornece um conjunto muito mais rico e conveniente de componentes para interface com usuário

O Swing é menos sujeito a erros específicos de cada plataforma

7

Page 8: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Evolução das AWT Java 1.0

Modelo de eventos arcaico baseado em interfaces

Java 1.1

Melhora do modelo de eventos: por delegação usando “design pattern” Observer

Java 1.2

Swing substitui totalmente componentes AWT

Mantém e estende a interface de eventose layout da versão 1.1

8

Page 9: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tipos de Aplicativos Graficos Há dois tipos de aplicações gráficas em Java

Applets executam dentro de um navegador Web

Aplicações standalone iniciadas via sistema operacional

Ambas capturam eventos do sistema e desenham-se sobre um contexto gráfico fornecido pelo sistema

Applets são aplicações especiais que executam a partir de um browser

Browser é quem controla seu ciclo de vida (início, fim, etc.)

Geralmente ocupam parte da janela do browser, maspodem abrir janelas extras

Possuem restrições de segurança

9

Page 10: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Principais classes de GUI

10

java.lang.Object

java.awt.Container

java.awt.Component

javax.swing.JComponent

Page 11: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Classe java.awt.Component

Raiz da hierarquia de componentes gráficos

Existe um Component por trás de tudo que pode ser

pintado na tela

Principais métodos (chamados pelo sistema)

void paint(java.awt.Graphics g)

void repaint()

void update(java.awt.Graphics g)

Dimension getSize() – retorna o tamanho de um

componente. O tipo de retorno é um objeto da

classe Dimension, que possui dois atributos

públicos height e width

void setSize(int, int) – Altera o tamanho de

um componente11

Page 12: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Class java.awt.Component

getLocation() e setLocation(int x, int y) –

estes métodos alteram a localização dos

componentes (em pixels) relativa ao canto superior

esquerdo do componente

O tipo de retorno de getLocation() é Dimension

setForeground() e setBackground() – altera as

cores dos componentes

Os argumentos são uma instância de

java.awt.Color

12

Page 13: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Class java.awt.Component setFont() – define a fonte que será usada

para renderizar o texto que será apresentado no componente

Este método recebe três argumentos: fonte, estilo e o tamanho

setEnable(boolean) – habilita ou

desabilita um componente

Este método é útil para criar interfaces que reflitam o estado atual da aplicação do usuário

13

Page 14: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

java.awt.Container

Subclasse de java.awt.Component

São “recipientes”. Podem conter outros

componentes

Descendentes da classe Container:

Frame, Panel, Applet e

JComponent (raiz da hierarquia dos

componentes Swing)

Para adicionar um componente em um

Container (Panel, Frame, Applet) utiliza-se

o método add(Component c)

14

Page 15: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

javax.swing.JComponent

Fornece recursos de alto nível a todos os

componentes swing

Tamanho preferencial setPreferredSize()

Suporte a acessibilidade e

internacionalização

Suporte a dicas quando o mouse permanece

sobre um componente

Definição de bordas

15

Page 16: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JComponent

JComboBox JLabel JList JMenuBar

JPanel JPopupMenu JScrollBar JScrollPane

JTextComponent

JTable

JprogressBar

JSplitPane

JViewPoint

JDesktopPane

JFileChooser

JTree

JRootPane

JTabbedPane

JColorChooser

JLayeredPane

JInternalFrame

JSeparator

JToolbar

JOptionPane

JSlider

JToolTip

JButton

JToggleButton

JCheckBox

JRadioButton

JMenu

JMenuItem

JEditorPane

JTextPane

JTextField

JPasswordField

AbstractButton

Componentes de Texto

Botões

Principais Componentes

Page 17: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Frames (Molduras)

É uma janela independente que pode ser

movimentada na tela independente de

quaisquer outras janelas de GUI

Java fornece duas classes para este fim:

java.awt.Frame, subclasse da classe

java.awt.Window e

javax.swing.JFrame, subclasse de

java.awt.Frame

17

Page 18: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Hierarquia de Herança da Classe JFrame

18

java.lang.Object

java.awt.Component

java.awt.Container

javax.swing.JComponent java.awt.Window

java.awt.Frame

javax.swing.JFrame

javax.swing.JPanel. . .

Page 19: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Frames (JFrame)

O seguinte código exibe um JFrame vazio:

19

import javax.swing.JFrame;

public class Moldura {

public static void main(String[] args) {

JFrame f = new JFrame("Primeira moldura");

f.setSize(300, 250);

f.setVisible(true);

}

}

É necessário, pois

um frame recém

construído não está

visível na tela

Aparece no título da moldura

Page 20: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Adicionando componentes ao JFrame

Até o JDK 1.5 era necessário obter um Container para adicionar os componentes

20

JFrame frame = new JFrame(“Teste");

Container cont = frame.getContentPane();

JPanel pan = new JPanel();

pan.add(new JButton("Button"));

cont.add(pan);

A SUN corrigiu este inconveniente possibilitando a

verificação especial deste recurso em tempo de

execução

JFrame frame = new JFrame(“Teste");

JPanel pan = new JPanel();

pan.add(new JButton("Button"));

frame.add(pan);

Era necessário para

manter a independência

de plataforma

Page 21: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Panel e JPanel

É um recipiente de uso geral. Ele não pode

ser usado isoladamente, como frames e

caixas de diálogo

Painéis podem administrar eventos

21

Page 22: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos

Page 23: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos Esta seção apresenta como lidar com eventos ou

“ações” que ocorrem dentro de ambientes GUI

Interfaces gráficas são guiadas por eventos

Exemplo: movimento do mouse, pressionar um botão,

entrada de dados em um textfield, etc.

Em java eventos são objetos que descrevem o que

aconteceu

Eventos em Java são uma instância de uma subclasse de

java.util.EventObject

23

Fornece o método getSource() que retorna a

fonte do evento

Page 24: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos

O modelo de eventos se torna fácil de usar, pois é baseado em uma nomenclatura simples: Para cada tipo de evento XXXEvent existe

uma interface XXXListener (interface

“ouvinte”):

Os métodos desta

interfaces são todos

public void e recebem

um único argumento

do tipo XXXEvent

(um objeto)

24

ActionEvent: ActionListener

ItemEvent : ItemListener

TextEvent : TextListener

WindowEvent: WindowListener

KeyEvent : KeyListener

. . .

XXXEvento : XXXListener

Page 25: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos Nomenclatura de eventos:

Se um componente emite eventos de tipo

XXXEvent, então ele tem um método público

chamado addXXXListener(XXXListener)

Quando um componente éativado de uma maneira queo leve a emitir eventos XXX, todos os receptores registrados recebem uma chamada para um dos métodos da interface receptora

25

Qualquer objeto que

implementa esta

interface pode ser

registrado como um

receptor de eventos

XXX

Page 26: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos

Nomenclatura de eventos:

Além do método addXXXListener

(XXXListener), um componente que emite

eventos, também tem um método público

chamado removeXXXListener(XXXListener)

Possibilita que os receptores que não estejam

mais interessados em eventos XXX desfaçam o

registro

26

Page 27: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Modelo de Tratamento de Eventos

Pode ser dividido em três partes

1. Origem do evento (fonte)

É o resultado de alguma ação do usuário

em um componente GUI

Exemplo: o clique de mouse em um

componente irá gerar (source) um

ActionEvent

27

Page 28: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Modelo de Tratamento de Eventos

28

Page 29: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Modelo de Tratamento de Eventos

2. Objeto que contem informações sobre evento

(ActionEvent)

Encapsula informações sobre o evento que

ocorreu

Exemplo: um objeto da Classe ActionEvent

Todo evento tem um objeto que é sua

fonte

Object fonte = evento.getSource();

29

Page 30: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Modelo de Tratamento de Eventos

3. Listener (Ouvinte)

Recebe eventos como argumento

30

public class NomeClasse implements ActionListener {

public void actionPerformed(ActionEvent evt) {

Object fonte = evt.getSource();

System.out.println(evt + “em” + fonte);

}

}

Page 31: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Modelo de Tratamento de Eventos

Programador deve realizar duas tarefas

1. Registrar um ouvinte para cada evento

que se deseja tratar

2. Implementar o(s) método(s) que

manipulam o evento

31

Page 32: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Como ligar a fonte ao Ouvinte Na ocorrência de um evento, em uma fonte, todos os

“ouvintes” registrados serão notificados.

fonte.add<Listener> (referência_para_Listener);

O mesmo objeto que é fonte às vezes também é listener,

se implementar as interfaces:

Ainda assim, é necessário registrar a fonte ao listener

this.addWindowListener(this);

32

Fonte Ouvinte

Page 33: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Descrição dos Eventos

Descendentes de java.awt.event.AWTEvent

Divididos em categorias (java.awt.event)

ActionEvent (fonte: componentes de ação (JButton,

JTextField, ...))

MouseEvent (fonte: componentes afetados pelo

mouse)

ItemEvent (fonte: componentes de seleção

(JCheckBox, JRadioButton, JComboBox, ...))

AdjustmentEvent (fonte: scrollbars)

TextEvent (fonte: componentes de texto)

WindowEvent (fonte: janelas)

FocusEvent (fonte: componentes em geral)

KeyEvent (fonte: componentes afetados pelo teclado)33

Page 34: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Alguns componentes (subclasse de JComponent)

Page 35: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JLabel

São strings de texto usadas para identificar

outros elementos. Normalmente são

inseridas à esquerda ou acima do elemento

que está sendo rotulado

Podem apresentar:

Somente Texto

Imagens

Texto e imagens

35

Page 36: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JTextField e JPasswordField É um dispositivo de linha única de texto

Em virtude de ser possível apenas uma linha, um

ActionListener pode ser informado – através de

actionPerformed() – quando a tecla enter for

pressionada

Este componente não exibe barra de rolagem, mas

é possível rolar sobre o texto longo da esquerda para

a direita, se for necessário

A classe JPasswordField herda de JTextField e

adiciona vários métodos que são específicos ao

processamento de senhas36

Page 37: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JTextField e JPasswordField

37 Confira: TextFieldTest.java

Page 38: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Botões

São elementos de forma retangular que o

usuário utiliza para iniciar ações

O pacote swing define vários tipos de

botões

botões de comando

Check boxes (caixa de seleção)

Radio buttons

Todos estes botões são subclasse de

javax.swing.AbstractButton38

Page 39: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JButton

39

javax.swing.JComponent

javax.swing.JButton javax.swing.ToggleButton

javax.swing.JCheckBox javax.swing.JRadioButton

javax.swing.AbstractButton

(Classe Abstrata)

Page 40: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JButton

São criados com a classe JButton

Quando o usuário clica no botão é gerado um ActionEvent

O método actionPerformed(ActionEvent evt) de

qualquer “ouvinte” registrado é chamado quando o botão for pressionado

40

Page 41: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JCheckBox (Caixa de Seleção)

Fornece um dispositivo simples de entrada

“liga/desliga” com um rótulo de texto ao lado

A seleção ou o cancelamento de um checkbox é

notificado pela interface ItemListener que define o

método:

public void itemStateChanged(ItemEvent e)

Um objeto da classe ItemEvent possui um método

getStateChange(), que retorna uma das duas

constantes:

ItemEvent.SELECTED

ItemEvent.DESELECTED

41

Page 42: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JRadioButton e ButtonGroup Os botões de opção normalmente aparecem como um

grupo em que apenas um botão de opção pode ser selecionado

O relacionamento lógico entre botões de um grupo é mantido por um objeto ButtonGroup

O objeto ButtonGroup em si não é um componente

GUI, pois não é exibido em uma interface com o usuário

O mesmo pode ser utilizado como parâmetro no construtor de um JRadioButton

42

Page 43: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JRadioButton (Botões de Opção)

43

Page 44: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JToolTip (Dica)

É uma string de texto que fornece uma dica. Aparece automaticamente quando o mouse permanece sobre o componente

Pode ser configurado para qualquer JComponent

É necessário apenas chamar o método

setToolTipText() no componente

Ex: comp.setToolTipText(“dica”);

44

Page 45: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JComboBox (Escolhas) Fornece uma lista de itens entre os quais o

usuário pode escolher

JComboBox gera ItemEvent, assim como, JCheckBox e JRadioButton

Uso de classe interna anônima para o

tratamento de eventos

45

Page 46: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

JList Exibe uma série de itens em que o usuário pode

selecionar um ou mais itens

Este componente suporta

Listas de uma única seleção:

Lista de seleção múltipla:

46

Page 47: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos do Mouse

Interfaces ouvintes de eventos do mouse

MouseListener e MouseMotionListener

Os eventos do mouse podem ser

capturados por qualquer componente GUI

que herda de javax.swing.JComponent

Todos os métodos “ouvintes” aceitam um

objeto MouseEvent como seu argumento

47

Page 48: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos do Mouse (MouseEvent)

48

Métodos (Ouvintes) da interface MouseListener

mouseClicked(MouseEvent e)Quando o botão do mouse for pressionado

e liberado

mousePressed(MouseEvent e) Quando o botão do mouse for pressionado

mouseReleased(MouseEvent e)Quando o botão do mouse for liberado

(precedido por um evento mousePressed)

mouseEntered(MouseEvent e)Quando o cursor do mouse entra nos

limites de um componente

mouseExited(MouseEvent e)Quando o cursor do mouse deixa os

limites de um componente

Page 49: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos do Mouse (MouseEvent)

49

Métodos (Ouvintes) da interface MouseMotionListener

mouseDragged(MouseEvent) Quando o botão do mouse for pressionado

e movido (precedido por uma chamada

mousePressed)

mouseMoved(MouseEvent) Quando o cursor do mouse for movido nos

limites de um componente

Page 50: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Classes Adaptadoras

Padrão de Projeto chamado Adapter

Algumas interfaces possuem uma classe adaptadora que

implementa todos os seus métodos, com um corpo vazio:

Só existem para interfaces que possuem mais de um

método

Pode-se herdar de uma classe adaptadora e fornecer

uma implementação (sobrescrever) somente o método

necessário para o tratamento do evento

50

Page 51: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Classes Adaptadoras O nome da classe adaptadora é semelhante

ao do Listener :

MouseListener: MouseAdapter

MouseMotionListener: MouseMotionAdapter

KeyListener: KeyAdapter

WindowListener: WindowAdapter ...

51

Page 52: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Tratamento de Eventos do Teclado Uma classe que implementa KeyListener deve fornecer

as definições para os métodos:

KeyPressed

KeyReleased

KeyTyped

Cada uma das classes recebe um KeyEvent como argumento

A classe trata seus próprios eventos de teclado usando o método addKeyListener

52

Page 53: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

Gerenciadores de Layout

Page 54: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

54

Objetivos

Apresentar os gerenciadores de layout:

FlowLayout

BorderLayout

GridLayout

BoxLayout

GridBagLayout

Page 55: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

55

Gerenciadores de Layouts

São fornecidos para organizar componentes GUI em

um container para propósitos de apresentação

processam a maioria dos detalhes, fornecendo uma

maneira automática de posicionar os componentes

gráficos nos containers

Todos os gerenciadores de Layout implementam a

interface LayoutManager ou a subinterface

LayoutManager2

Cada container como um Painel ou Frame (molduras)

possui um gerenciador de layout padrão associado

Page 56: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

56

Gerenciadores de Layouts

É possível desativar o Gerenciador de

Layout caso o programador queira definir o

tamanho ou posição dos componentes

Para desligar layouts:

recipiente.setLayout(null);

Porém torna-se necessário definir posição e

tamanho de cada componente:

componente.setBounds(x, y, larg, alt);

Page 57: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

1. public class NullLayout extends JFrame {

2. private JButton b1, b2, b3;

3. NullLayout(String nome) {

4. super(nome);

5. Container ct = this.getContentPane();

6. ct.setLayout(null);

7. b1 = new JButton("Maça");

8. b2 = new JButton("Pera");

9. b3 = new JButton("Uva");

10. // parametros: x, y, largura e altura

11. b1.setBounds(10,10,150,40);

12. b2.setBounds(10,60,150,40);

13. b3.setBounds(10,110,150,40);

14. ct.add(b1); ct.add(b2); ct.add(b3);

15. this.setSize(180, 200);

16. this.setVisible(true);

17. } }

Exemplo

Desativa o

gerenciador de

Layout

Page 58: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

58

Tamanho e Posição dos Componentes

Um container mantém uma referência a uma

instância particular do Gerenciador de Layout

Sempre quando for necessário posicionar o

componente será invocado o Gerenciador de Layout

Ou seja, se o usuário tentar definir o tamanho ou

posição dos componentes (setSize() ou

setLocation()) o Gerenciador de Layout irá

anular a decisão

Page 59: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

59

Tamanho e Posição dos Componentes

public class TamanhoComp extends JFrame {

public static void main(String[] args) {

JFrame frame = new JFrame();

JPanel panel = new JPanel();

for (int i=0; i<2; i++) {

JButton btn = new JButton("Não adianta chamar setSize");

btn.setSize(300, 300);

panel.add(btn);

}

frame.getContentPane().add(panel);

frame.setSize(450, 70);

frame.setVisible(true);

}

}

Esta linha, não tem efeito,

pois o botão é adicionado

ao painel, que chama o seu

gerenciador de layout para

decidir a sua posição e quão

grande o componente deve

ficar

Page 60: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

60

Política de Layout Cada componente Java tem um tamanho preferencial:

Normalmente é o menor tamanho necessário para

apresentar o componente de maneira visualmente

significativa

Exemplo de um botão é o tamanho de sua etiqueta de

texto

O Gerenciador de Layout equilibra duas considerações: a

política de layout e o tamanho preferencial de cada

componente. A prioridade é para a política de layout

Page 61: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

61

Etapas para se construir uma interface

Cada Painel é montado em quatro etapas:

1. Construir (instanciar) o painel

2. Dar ao painel o gerenciador de layout

Quando um container é instanciado (etapa 1) ele recebe

um gerenciador de layout padrão. Esta etapa pode ser

pulada se o gerenciador a ser utilizado for o padrão

3. Preencher o painel

Envolve montar componentes e acrescentá-los ao painel

4. Acrescentar o painel ao seu próprio container

OBS: Se algum dos componentes for ele próprio um painel,

as etapas 1– 4 precisam ser executadas sucessivamente

Page 62: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

62

Gerenciadores de Layouts

Existem vários gerenciadores de layouts disponível com a

linguagem Java

FlowLayout, BorderLayout, GridLayout

BoxLayout, GridBagLayout

Principais métodos da classe java.awt.Container

setLayout(LayoutManager m)

void add(Component c) – adiciona um componente

ao container sob o controle do gerenciador de layout

utilizado

Page 63: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

63

FlowLayout

É o gerenciador de layout mais simples

Dispõe os objetos seqüencialmente da esquerda

para a direita na ordem em que foram adicionados

container.setLayout(new FlowLayout());

Permite aos componentes serem alinhados à

esquerda, centralizados (padrão) ou à direita

objetoLayout.setAlignment(FlowLayout.RIGHT);

Page 64: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

64

FlowLayout

Todos os componentes possuem um

método chamado getPreferredSize(),

usado pelos gerenciadores de layout para

perguntar o tamanho de cada componente

É o padrão para

java.awt.Applet,

java.awt.Panel e

javax.swing.JPanel

Page 65: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

65

FlowLayout - Principais construtores

FlowLayout()

Centraliza os componentes deixando uma distância entre eles (gap) de 5 pixels.

FlowLayout(int align)

Constrói um layout com alinhamento estabelecido (FlowLayout.CENTER, FlowLayout.LEFT, FlowLayout. RIGHT)

FlowLayout(int align, int hgap, int vgap)

Define o alinhamento e a distância horizontal e vertical, respectivamente

Page 66: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

66

BorderLayout

É o gerenciador padrão para JFrames,

JApplets e Caixas de Diálogo

A classe BorderLayout herda diretamente

da classe Object e implementa a interface

LayoutManager2 (uma subinterface de

LayoutManager)

Organiza os componentes em cinco áreas

Norte, Sul, Leste, Oeste e Centro

Page 67: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

67

BorderLayout Os componentes devem ser adicionadas a regiões nomeadas no gerenciador de layout, caso contrário não ficarão visíveis: NORTH, SOUTH, EAST, WEST, CENTER

Norte e Sul têm prioridade sobre Leste e Oeste, que têm prioridade sobre Centro

Se for adicionado um componente ao Centro, este se expande até ocupar todo o espaço restante na janela

O componente colocado em uma região pode ser um container ao qual serão anexados outros componentes (p.ex., JPanel)

Page 68: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

68

GridLayout

Fornece flexibilidade para colocação de

componentes

Divide o container em uma grade de modo

que os componentes podem ser colocados

em linhas e colunas

A classe GridLayout herda diretamente da

classe Object e implementa a interface

LayoutManager

Page 69: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

69

GridLayout Com o gerenciador GridLayout, a posição relativa dos

componentes não é alterada quando a área é redimensionada

Os componentes são adicionados iniciando na célula na parte superior esquerda da grade e prosseguindo da esquerda para a direita até a linha estar cheia. Então, o processo continua na próxima linha

Page 70: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

70

Gerenciando layouts complexos com Painéis Interfaces complexas exigem que cada

compo-nente seja colocado numa localização exata

Para tanto, geralmente usam-se múltiplos painéis, cada um com seu layout específico

Container -> JComponent -> JPanel

Page 71: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

71

Classe “container” Box

Permite colocar uma única linha ou coluna de

componentes com mais flexibilidade do que o

GridLayout

Existe um Container - a classe Box – cujo gerenciador

de layout padrão é BoxLayout:

Fornece métodos estáticos para criar um BoxLayout

horizontal ou vertical:

Box b = Box.createHorizontalBox( )

São organizados da esquerda para direita

Box b = Box.createVerticalBox( )

São organizados de cima para baixo

Page 72: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

72

Gerenciador BoxLayout e a classe “container” Box

Depois, adicionam-se os componentes da maneira

usual:

b.add(btnOk);

b.add(btnSair);

Page 73: Construção de Interfaces Gráficas - Introduçãodeinf.ufma.br/~geraldo/paradigmas/9.0IntroSwing.pdf · interface gráfica ... interface com usuário O Swing é menos sujeito a

73

Referências Deitel & Deitel. Java como Programar, 6ª

ed. Caps. 11 e 22;

Materiais do site da SUN (http://java.sun.com)