Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 383

PPROG Paradigmas da Programação

Interfaces Gráficas
Componentes Gráficos
Gestores de Posicionamento
Manipuladores de Eventos

(Livro Big Java, Late Objects – Capítulos 10 e 11)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 1/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 2/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 3/383


Introdução Sumário
▪ Interface do Utilizador
▪ Noção
▪ Tipos
▪ Consola
▪ Gráfica (GUI – Graphical User Interface)

▪ Interface do Utilizador Gráfica


▪ Constituição
▪ Componentes Gráficos
▪ Gestores de Posicionamento
▪ Manipuladores de Eventos
▪ Toolkits Java para GUIs
▪ AWT
▪ Swing
▪ Java 2D
▪ História AWT e Swing
▪ Construção
▪ Editor GUI
▪ Programação
Nelson Freire (ISEP–DEI-PPROG 2016/17) 4/383
Introdução Interface do Utilizador
▪ Noção
▪ Segmento de código de uma aplicação que permite a sua interação com o utilizador
▪ Objetivo
▪ Permitir ao utilizador controlar o funcionamento do programa
▪ Meios Fornecidos
▪ Entrada // Para utilizador controlar execução do programa
▪ Saída // Para programa indicar efeitos do controlo ao utilizador

Aplicação
Interface do Utilizador (UI)
Entrada Saída

Utilizador

Nelson Freire (ISEP–DEI-PPROG 2016/17) 5/383


Introdução Tipos de Interface do Utilizador
▪ Consola
▪ Interface Textual
▪ Entrada
▪ Suportada por comandos escritos no teclado
▪ Saída
▪ Suportada por texto impresso no monitor

▪ Gráfica ( GUI - Graphical User Interface )


▪ Baseada
▪ Janelas do Sistema Operativo
▪ Constituídas por objetos
▪ Entrada
▪ Suportada por objetos de janelas
▪ Indicados através de rato e/ou teclado
▪ Saída
▪ Suportada por objetos de janelas

Nelson Freire (ISEP–DEI-PPROG 2016/17) 6/383


Introdução Constituição de um GUI 1/2
▪ GUI
▪ Constituído por objetos
▪ Por exemplo
▪ Janela
▪ Botões de comando Janela

Botão de Comando

▪ Tipos de Objetos
▪ Componentes Gráficos
▪ Gestores de Posicionamento // Layout Managers
▪ Manipuladores de Eventos // Event Listeners

Nelson Freire (ISEP–DEI-PPROG 2016/17) 7/383


Introdução Constituição de um GUI 2/2
▪ Componentes Gráficos
▪ Objetos
▪ Com representação gráfica
▪ Para mostrar num monitor
▪ Podem interagir com o utilizador
▪ Exemplo
▪ Botões de comando
Botão de
Comando
▪ Gestores de Posicionamento
▪ Objetos
▪ Gerem a colocação dos componentes na GUI
▪ Automaticamente
▪ Exemplo
▪ Redimensionamento da Janela

▪ Manipuladores de Eventos
▪ Respondem às solicitações do utilizador
▪ Exemplo
▪ Resposta a cliques nos botões de comando

Nelson Freire (ISEP–DEI-PPROG 2016/17) 8/383


Introdução Toolkits Java para GUI
▪ Principais
▪ Swing // Componentes Gráficos
▪ Java 2D // Componentes especiais, para gráficos 2D de alta-qualidade
▪ AWT // Gestores de Posicionamento
// Manipuladores de Eventos
▪ Diagrama de Tecnologias Java Standard Edition 8 (http://docs.oracle.com/javase/8/docs/index.html)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 9/383


Introdução História dos Toolkits AWT e Swing
▪ AWT (Abstract Window Toolkit)
▪ 1º Toolkit Java para construir GUIs
▪ Introduzido pelo JDK 1.0
▪ Componentes apresentavam limitações
▪ Qualidades Gráfica e Funcional < Plataformas Nativas mais ricas (Windows e Macintosh)

▪ Swing
▪ 2º Toolkit Java para construir GUIs
▪ Introduzido pelo JDK 1.1
▪ Não substitui completamente o AWT
▪ Construído por cima do AWT
▪ Manipuladores de Eventos e Gestores de Posicionamento são AWT
▪ Estilo dos componentes gráficos
▪ Independente do Sistema Operativo
Swing Componentes Gráficos
▪ Fornecidos vários estilos
Gestores de Posicionamento
▪ Classes Swing AWT Manipuladores de Eventos
▪ package javax.swing
▪ Nome começado por J
▪ Em geral
Nelson Freire (ISEP–DEI-PPROG 2016/17) 10/383
Introdução Construção de um GUI 1/3
▪ Formas
▪ Visual
▪ Programada

Nelson Freire (ISEP–DEI-PPROG 2016/17) 11/383


Introdução Construção de um GUI 2/3
▪ Visual Netbeans - Editor GUI
▪ Usando
▪ Editor GUI
▪ Exemplo
▪ Editor GUI do Netbeans
▪ Classe JFrame Form

▪ Programador
▪ Desenha interface gráfico
▪ Altera propriedades de objetos

▪ Editor GUI
▪ Cria código
▪ Automaticamente

▪ Facilita criação de GUI

Nelson Freire (ISEP–DEI-PPROG 2016/17) 12/383


Introdução Construção de um GUI 3/3
▪ Programada
▪ Escrita de código GUI

▪ Programador
▪ Precisa de conhecer código GUI

▪ Código mais simples


▪ Do que forma visual

▪ Estudada
▪ Em PPROG

Netbeans - Editor de Código Fonte

Nelson Freire (ISEP–DEI-PPROG 2016/17) 13/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 14/383


Componentes
Introdução Sumário
▪ Introdução
▪ Categorias de Componentes Gráficos
▪ Controlos Básicos
▪ Apresentação de Informação
▪ Contentores de Componentes Gráficos

▪ Estilos dos Componentes Swing


▪ Exemplos
▪ Java
▪ Windows
▪ Demos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 15/383


Componentes
Introdução Categorias de Componentes Gráficos
▪ Controlos Básicos
Aplicação
▪ Usados principalmente na Entrada da Aplicação
Interface do Utilizador (UI)
▪ Para obter dados do utilizador
Entrada Saída
▪ Apresentação de Informação
▪ Usados na Saída da Aplicação
▪ Para mostrar informação ao utilizador

▪ Subcategorias
▪ Editável
▪ Não-Editável
Utilizador
▪ Contentores de Componentes Gráficos
▪ Usados na Estrutura da Interface Gráfica
▪ Para suportar componentes gráficos
▪ Subcategorias
▪ Nível Superior
▪ Genéricos
▪ Especiais
Nelson Freire (ISEP–DEI-PPROG 2016/17) 16/383
Componentes
Introdução Controlos Básicos 1/3

Componente Classe Interesse Representação Gráfica


Botão de Comando JButton Ordenar execução de comando.

Menu JMenu Escolher um comando entre


múltiplos alternativos;

Vantagem:
▪ Ocupa espaço reduzido da
GUI
(área da barra de menus).

Caixa de Verificação JCheckBox Escolher múltiplas opções em


simultâneo.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 17/383


Componentes
Introdução Controlos Básicos 2/3

Componente Classe Interesse Representação Gráfica


Botão de Opção JRadioButton Escolher uma opção entre
múltiplas alternativas.

Caixa de Combinação JComboBox Escolher um item de uma lista


de objetos, sendo possível
editar o item escolhido;
Cada item visualiza a string
retornada pelo método
toString() do respetivo objeto.

Caixa de Listagem JList Apresentar uma lista de itens,


numa ou mais colunas, para
serem escolhidos (escolha
simples ou múltipla);
Os itens correspondem a
objetos;
Os componentes gráficos
podem ser visualizados. JList dentro de JScrollPane

Nelson Freire (ISEP–DEI-PPROG 2016/17) 18/383


Componentes
Introdução Controlos Básicos 3/3

Componente Classe Interesse Representação Gráfica


Campo de JTextField Introduzir pequena quantidade
Texto de texto.

Campo de JPasswordButton Introduzir pequena quantidade


Password de texto, sem mostrar carateres
digitados.
Corrediça JSlider Introduzir facilmente valor
numérico a partir de uma gama
de valores;
Vantagem:
▪ Ocupa pouco espaço.
Spinner JSpinner Escolher item de uma gama de
itens;
Vantagens:
▪ Ocupa pouco espaço;
▪ Não mostra lista que pode
cobrir outros componentes;
▪ Utilizador pode editar valor.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 19/383


Componentes
Introdução Apresentação de Informação : Editável 1/3
▪ Informação pode ser modificada por utilizador

Componente Classe Interesse


Escolha de Cor JColorChooser Escolher cor a partir de paleta de cores.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 20/383


Componentes
Introdução Apresentação de Informação : Editável 2/3

Componente Classe Interesse


Área de Texto JTextArea Mostrar e editar texto sem estilo e em múltiplas linhas.

Painel de Edição JEditorPane Mostrar e editar texto com estilo nativo ou definido pelo utilizador.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 21/383


Componentes
Introdução Apresentação de Informação : Editável 3/3

Componente Classe Interesse


Escolha de Ficheiro JFileChooser Navegar no sistema de ficheiros e depois escolher um
ficheiro/diretório da lista apresentada ou introduzir o nome
de um ficheiro/diretório.
Tabela JTable Mostrar tabela de dados;
Opcionalmente, utilizador pode editar os dados.
Árvore JTree Mostrar informação organizada de forma hierárquica.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 22/383


Componentes
Introdução Apresentação de Informação: Não-Editável
▪ Informação
▪ Não pode ser alterada pelo utilizador
▪ Interesse Geral
▪ Apenas informar o utilizador
▪ Tipos

Componente Classe Interesse Representação Gráfica


Label JLabel Mostrar imagem e/ou texto não
editável.

Barra de JProgressBar Mostrar graficamente a quantidade de


Progresso trabalho total completado.
Separador JSeparator Mostrar linha divisória horizontal ou
vertical; usado normalmente em menus
e barras de ferramentas.

Dica JToolTip Mostrar dica sobre componente GUI.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 23/383


Componentes
Introdução Contentores 1/4
▪ Interesse Geral
▪ Servirem de estrutura da GUI
▪ Para suportar componentes gráficos

▪ Subcategorias
▪ Nível superior

▪ Genérico

▪ Especial

Nelson Freire (ISEP–DEI-PPROG 2016/17) 24/383


Componentes
Introdução Contentores 2/4
▪ Nível Superior
▪ Não podem ser incluídos noutros componentes gráficos
▪ Qualquer aplicação
▪ Usa pelo menos um componente deste tipo
▪ Tipos

Componente Classe Interesse


Janela JFrame Criar janelas.

Caixa de Diálogo JDialog Criar caixas de diálogo personalizadas.

Applet JApplet Criar applets com componentes Swing;


Applet = programa que pode ser incluído numa página HTML.

JFrame JApplet

JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 25/383


Componentes
Introdução Contentores 3/4
▪ Genéricos
▪ Para uso geral
▪ Tipos
Componente Classe Interesse
Painel JPanel Criar painéis para construção de GUI sofisticados.
Painel de Deslocamento JScrollPane Apresentar componente maior que espaço
disponível para visualização.
Painel Dividido JSplitPane Mostrar 2 componentes, lado-a-lado ou cima-baixo.
Painel de Separadores JTabbedPane Permitir espaço partilhado por vários componentes.
Barra de Ferramentas JToolBar Criar barras de ferramentas.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 26/383


Componentes
Introdução Contentores 4/4
▪ Especiais
▪ Para uso particular
▪ Tipos

Componente Classe Interesse


Janela Interna JInternalFrame Criar janelas internas numa janela.

Layered Pane JLayeredPane Posicionar componentes num sistema de coordenadas


tridimensional (em camadas).
Root Pane JRootPane Presente em contentores de nível superior e em janelas
internas.
▪ Representação Gráfica

Nelson Freire (ISEP–DEI-PPROG 2016/17) 27/383


Componentes
Introdução Estilos dos Componentes Swing (Look and Feel) 1/2
▪ Exemplos
▪ Java (Metal) // por omissão
▪ Windows

Java Windows

Java
Java

Windows

Windows

Nelson Freire (ISEP–DEI-PPROG 2016/17) 28/383


Componentes
Introdução Estilos dos Componentes (Look and Feel) 2/2
▪ Modificação do Estilo por Omissão
▪ Não-programada
1. Abrir o ficheiro jre/lib/swing.properties // subdiretório de instalação do Java
2. Redefinir propriedade swing.defaultlaf
▪ Usar o nome da classe do LaF pretendida
▪ Exemplo: com.sun.java.swing.plaf.windows.WindowsLookAndFeel
3. Reiniciar aplicação para modificação ter efeito
▪ Esta propriedade só é lida no arranque da aplicação
▪ Programada
▪ Exemplo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 29/383


Componentes
Introdução Demos
▪ Java SE Development Kit 8 Demos and Samples Downloads
▪ Exemplo: SwingSet3

Nelson Freire (ISEP–DEI-PPROG 2016/17) 30/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 31/383


Componentes
Hierarquia Sumário
▪ Hierarquia de Classes
▪ Superclasses
▪ Component
▪ Container
▪ JComponent

Nelson Freire (ISEP–DEI-PPROG 2016/17) 32/383


Hierarquia
de Classes Hierarquia de Classes de Componentes Gráficos
Object

SWING AWT
Component

Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane

JLabel JFileChooser

JSeparator JMenuBar AbstractButton JPanel JScrollPane JTextComponent

JMenuItem JToggleButton JButton JTabbedPane JTextField JTextArea

JMenu JRadioButton JCheckBox JPasswordField JFormattedTextField

Legenda: Classe Abstrata Classe Instanciável Exercícios PPROG

Nelson Freire (ISEP–DEI-PPROG 2016/17) 33/383


Superclasses Classe Component 1/7
▪ Package
▪ java.awt

▪ Declaração
public abstract class Component extends Object
implements ImageObserver, MenuContainer, Serializable { ... }

▪ Classe Abstrata
▪ Não é instanciável
Object
▪ Topo da Hierarquia
▪ Superclasse AWT
Component
▪ Todas as classes de componentes gráficos
▪ Características
▪ Comuns a todos os componentes gráficos

▪ Objetivo
▪ Todos os objetos da hierarquia serem componentes gráficos
▪ Tenham representação gráfica num monitor
▪ Suportem interação com o utilizador

Nelson Freire (ISEP–DEI-PPROG 2016/17) 34/383


Superclasses Classe Component 2/7
▪ Interfaces Implementadas
▪ ImageObserver // para permitir atualização da imagem do componente quando é alterada
▪ MenuContainer // relacionada com menus popup
▪ Serializable // permite o armazenamento dos componentes em ficheiro

Nelson Freire (ISEP–DEI-PPROG 2016/17) 35/383


Superclasses Classe Component 3/7
▪ Campos
▪ Para especificar o alinhamento de componentes gráficos
▪ Mais usados

Declaração Funcionalidade
public static final float TOP_ALIGNMENT = 0.0f; Constante para especificar alinhamento no topo do
componente.

public static final float BOTTOM_ALIGNMENT = 1.0f; Constante para especificar alinhamento em baixo
do componente.

public static final float LEFT_ALIGNMENT = 0.0f; Constante para especificar alinhamento à esquerda
do componente.

public static final float CENTER_ALIGNMENT = 0.5f; Constante para especificar alinhamento no centro
do componente.

public static final float RIGHT_ALIGNMENT = 1.0f; Constante para especificar o alinhamento à direita
do componente.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 36/383


Superclasses Classe Component 4/7
▪ Métodos (1/4)
▪ Relacionados com representação gráfica dos componentes
▪ Mais usados
Declaração Funcionalidade
public void setMinimumSize( Dimension minimumSize ) Modifica o tamanho mínimo do componente;
▪ Exemplo: A unidade de medida é o pixel.
obj.setMinimumSize( new Dimension(10,30) );

public void setMaximumSize( Dimension maximumSize ) Modifica o tamanho máximo do componente.


▪ Exemplo:
obj.setMaximumSize( new Dimension(20,40) );

public void setSize( int width, int height ) Usado para modificar o tamanho de contentores
gráficos de nível superior, como por exemplo,
JFrame e JDialog;
O tamanho é definido através da largura (width) e
altura (height), e é modificado dinamicamente;
Estas dimensões são automaticamente
aumentadas se qualquer uma delas for menor
que o tamanho mínimo especificado previamente
através do método setMinimumSize.
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox JRadioButton
JMenu JMenuItem JMenuBar

Nelson Freire (ISEP–DEI-PPROG 2016/17) 37/383


Superclasses Classe Component 5/7
▪ Métodos (2/4)
Declaração Funcionalidade
public void setPreferredSize( Dimension preferredSize ) Serve para modificar o tamanho
de um componente adicionado a
▪ Exemplo: um contentor gráfico com gestor
obj.setPreferredSize(new Dimension(20,40) ); de posicionamento. Neste tipo de
contentor, o setSize() não modifica
o tamanho de um componente.
Para visualizar a modificação, usar
o método revalidade() do
contentor.
public void setBounds(int x, int y, int width, int height) Move o componente e altera o
seu tamanho;
(0,0) x A nova localização do canto
y superior esquerdo é especificada
Componente por x e y;
Contentor A nova dimensão é especificada
por width e height.

public Dimension getSize() Retorna tamanho do componente


num objeto tipo Dimension.

JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox
JMenu JMenuItem JMenuBar BorderLayout FlowLayout

Nelson Freire (ISEP–DEI-PPROG 2016/17) 38/383


Superclasses Classe Component 6/7
▪ Métodos (3/4)
Declaração Funcionalidade
public void setLocation( int x, int y ) Move o componente, colocando
o seu canto superior esquerdo no
ponto (x,y) do sistema de
coordenadas do seu painel
contentor;
O ponto (0,0) de um componente
é o seu canto superior esquerdo.
public void setFont( Font font ) Especifica a font do componente.
▪ Exemplo:
obj.setFont( new Font ("Arial", Font.BOLD + Font.ITALIC, 20 ) );
public void setVisible(boolean b) Mostra ( setVisible(true) ) ou
esconde ( setVisible(false) )
▪ Exemplo: componente.
obj.setVisible(true) ou obj.setVisible(false)
public void setEnabled( boolean b ) Desinibe ou inibe componente de
responder a ações do utilizador
▪ Exemplo: (interação).
obj.setEnable(true) ou obj.setEnable(false)

JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox
JMenu JMenuItem JMenuBar BorderLayout FlowLayout

Nelson Freire (ISEP–DEI-PPROG 2016/17) 39/383


Superclasses Classe Component 7/7
▪ Métodos (4/4)

Declaração Funcionalidade
public void setBackground( Color bg ) Especifica a cor de fundo do
componente.
▪ Exemplo:
obj.setBackground(Color.RED);

public void setForeground( Color fg ) Especifica a cor do conteúdo do


componente.
▪ Exemplos:
btnOK.setForeground( Color.RED );
lblNome.setForeground( Color.red );

public void revalidate( ) Útil para visualizar a modificação


dinâmica de um componente gráfico.
▪ Exemplo: painel adicionado após clique num botão Por exemplo, para ver um novo painel
... de componentes adicionado a uma
add(painel, BorderLayout.NORTH); janela, depois de acionado um botão
de comando;
painel.revalidate(); // para visualizar o painel
Revalida a hierarquia de componentes
até ao componente raíz validado mais
próximo;
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox
JMenu JMenuItem JMenuBar BorderLayout FlowLayout

Nelson Freire (ISEP–DEI-PPROG 2016/17) 40/383


Superclasses Classe Container 1/2
▪ Objetivo
▪ Tornar componentes em contentores de outros componentes gráficos

▪ Package
▪ java.awt
Object
▪ Declaração
public class Container extends Component { ... } Component AWT

▪ Classe Instanciável
Container
▪ Componentes Adicionados
▪ Registados numa lista
▪ Ordem na lista define
▪ Ordem dos componentes dentro do contentor
▪ Frente-para-Trás
▪ Sem especificar índice
▪ Inseridos no fim da lista
▪ Debaixo dos componentes adicionados anteriormente

Nelson Freire (ISEP–DEI-PPROG 2016/17) 41/383


Superclasses Classe Container 2/2
▪ Métodos Próprios
▪ Relacionados com operações típicas de contentores
▪ Mais usados
Declaração Funcionalidade
public Component add(Component comp) Adiciona o componente especificado no final do
▪ Exemplo: obj.add( new JPanel() ); contentor.

public Component add(Component comp, int index) Adiciona o componente especificado ao painel
(contentor) na posição indicada.

public Component getComponent(int n) Retorna o componente de índice n do contentor.

public Component[] getComponents() Retorna todos os componentes do contentor.


public void remove(Component comp) Remove do contentor o componente comp
especificado.
public void remove(int index) Remove o componente de índice index do
contentor.
public void removeAll() Remove todos os componentes adicionados ao
contentor.
public void setLayout( LayoutManager manager ) Altera o gestor de posicionamento.
▪ Exemplo: obj.setLayout(new FlowLayout();
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox JRadioButton
JMenu JMenuItem JMenuBar

Nelson Freire (ISEP–DEI-PPROG 2016/17) 42/383


Superclasses Classe JComponent 1/2
▪ Objetivo
Object
▪ Superclasse de todos os componentes Swing
▪ Exceções AWT
Component
▪ Contentores de nível superior
▪ JFrame
▪ JDialog Container

▪ Package Window
▪ javax.swing
Frame Dialog

JComponent JFrame JDialog

SWING

▪ Declaração
public abstract class JComponent extends Container
implements Serializable { ... }

▪ Classe Abstrata
▪ Não é instanciável

Nelson Freire (ISEP–DEI-PPROG 2016/17) 43/383


Superclasses JComponent 2/2
▪ Métodos Próprios
▪ Mais usados

Declaração Funcionalidade
public void setBorder(Border border) Especifica um bordo.
▪ Exemplos:
▪ Bordo Vazio:
painel.setBorder( new EmptyBorder(10,5,5,10) );
▪ (10,5,5,10) = (topo, esquerda, base, direita)
painel.setBorder( BorderFactory.CreateEmptyBorder(10,5,5,10) );
▪ Bordo com Título:
painel.setBorder( BorderFactory.CreateTitleBorder("Título") );

public void requestFocus() Pede para componente


adquirir foco de
▪ Exemplos: entrada (teclado).
txtNome.requestFocus();
btnOK.requestFocus();

JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox JRadioButton
JMenu JMenuItem JMenuBar

Nelson Freire (ISEP–DEI-PPROG 2016/17) 44/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 45/383


Interfaces Interface SwingConstants
▪ Declaração

public interface SwingConstants { Implementado nas Classes


public static final int CENTER = 0; ▪ JLabel
public static final int TOP = 1; ▪ AbstractButton
public static final int LEFT = 2;
public static final int BOTTOM = 3; ▪ JTextField
public static final int RIGHT = 4;
public static final int NORTH = 1;
public static final int NORTH_EAST = 2;
public static final int EAST = 3;
public static final int SOUTH_EAST = 4;
public static final int SOUTH = 5;
public static final int SOUTH_WEST = 6;
public static final int WEST = 7;
public static final int NORTH_WEST = 8;
public static final int HORIZONTAL = 0;
public static final int VERTICAL = 1;
public static final int LEADING = 10;
public static final int TRAILING = 11;
public static final int NEXT = 12;
public static final int PREVIOUS = 13;
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 46/383


Interfaces Interface WindowConstants
▪ Declaração

public interface WindowConstants { Implementado nas classes


public static final int DO_NOTHING_ON_CLOSE = 0; ▪ JDialog
▪ JFrame
public static final int HIDE_ON_CLOSE = 1;
public static final int DISPOSE_ON_CLOSE = 2;
public static final int EXIT_ON_CLOSE = 3;
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 47/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 48/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 49/383
Hierarquia
de Classes Hierarquia de Classes de Contentores de Componentes Gráficos
Object

SWING AWT
Component

Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane

JLabel JFileChooser

JSeparator JMenuBar AbstractButton JPanel JScrollPane JTextComponent

JMenuItem JToggleButton JButton JTabbedPane JTextField JTextArea

JMenu JRadioButton JCheckBox JPasswordField JFormattedTextField

Legenda: Classe Abstrata Classe Instanciável Exercícios PPROG – Contentores de Componentes G.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 50/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 51/383
Painéis Noção de Painel
▪ Painel
▪ Serve de contentor de componentes gráficos // pode armazenar também painéis

▪ Interesse dos Painéis


▪ Permitir posicionamento preciso de componentes gráficos na GUI
▪ Posicionamento: feito por objetos gestores de posicionamento associados ao painel
▪ Precisão: encaixando painéis com diferentes gestores de posicionamento

▪ Exemplo
GUI Posicionamento dos Componentes do GUI (Layout)

Painel Gestor
Flowlayout
BorderLayout
Número de Cliques: 0

Label
Botão de Comando

Nelson Freire (ISEP–DEI-PPROG 2016/17) 52/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 53/383
Classe JPanel Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JPanel extends JComponent Object
implements Accessible { ... }
AWT
Component
▪ Classe Instanciável
▪ Objetos são painéis Container

▪ Gestor de Posicionamento por Omissão


JComponent Window
▪ FlowLayout
JPanel Frame

JFrame
SWING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 54/383


Classe JPanel Construtores
Declaração Funcionalidade
public JPanel() Cria painel com gestor de
posicionamento FlowLayout.
▪ Exemplo:
JPanel p1 = new JPanel();

public JPanel( LayoutManager layout ) Cria painel com gestor de


posicionamento layout passado por
▪ Exemplo: parâmetro.
JPanel p2 = new JPanel( new BorderLayout() );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 55/383


Classe JPanel Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios
▪ Pouco usados

Nelson Freire (ISEP–DEI-PPROG 2016/17) 56/383


Classe JPanel Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 57/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 58/383
JLayeredPane Interesse
▪ Posicionar Componentes em Camadas
▪ Usa 3ª dimensão ▪ Exemplo
▪ Designações
▪ Profundidade
▪ Ordem Z
▪ Representação
▪ Índice
▪ Valor Inteiro

Y Z

Nelson Freire (ISEP–DEI-PPROG 2016/17) 59/383


JLayeredPane Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JLayeredPane extends JComponent
implements Accessible { ... }

Object

AWT
Component

Container

JComponent Window

JLayeredPane Frame

JFrame
SWING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 60/383


JLayeredPane Construtores
Declaração Funcionalidade
public JLayeredPane() Cria painel JLayeredPane.
▪ Exemplo:
JLayeredPane lp = new JLayeredPane ();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 61/383


JLayeredPane Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios
Declaração Funcionalidade
public void moveToBack(Component c) Move componente c para baixo de
todos os componentes da sua camada
corrente (posição -1).
public void moveToFront(Component c) Move componente c para cima de todos
os componentes da sua camada
corrente (posição 0).
public void setLayer(Component c, int layer, int position) Especifica camada do componente c e a
sua posição dentro da camada.

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 62/383


JLayeredPane Adição de Componentes Gráficos
▪ Requer
▪ Especificação da camada // profundidade
▪ Em Componentes Sobrepostos
▪ Componente no Topo = Componente com Maior profundidade

Y Z

Nelson Freire (ISEP–DEI-PPROG 2016/17) 63/383


JLayeredPane Camada
▪ Pode conter
▪ Múltiplos componentes gráficos
▪ Cada Componente
▪ Ocupa uma posição
▪ Pode ser movido para baixo ou para cima de todos os outros // da mesma camada

Nelson Freire (ISEP–DEI-PPROG 2016/17) 64/383


JLayeredPane Exemplo: Camada com Múltiplos Componentes Gráficos
▪ Componente colocado por cima dos restantes componentes da mesma camada

Nelson Freire (ISEP–DEI-PPROG 2016/17) 65/383


JLayeredPane Uso do JLayeredPane
▪ Em Componentes Gráficos
▪ JFrame
▪ JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 66/383


JLayeredPane Bibliografia

▪ http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 67/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 68/383
JRootPane Interesse
▪ Geralmente
▪ Não é instanciada

▪ Objetos Usados nos Componentes Gráficos


▪ Janelas Internas
▪ Contentores de Nível Superior
▪ JFrame
▪ JDialog
▪ JApplet

Nelson Freire (ISEP–DEI-PPROG 2016/17) 69/383


JRootPane Estutura Interna
▪ Root Pane contém
▪ Painéis
▪ Layered Pane
▪ Content Pane
▪ Glass Pane
▪ Barra de Menus // Opcional

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 70/383


JRootPane Layered Pane
▪ Interesse
▪ Posicionar os componentes
▪ Content Pane
▪ Barra de Menus // opcional

▪ Adicionalmente
▪ Posicionar componentes em camadas

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 71/383


JRootPane Content Pane
▪ Interesse
▪ Contentor dos componentes gráficos visíveis
▪ Excluíndo Barra de Menus

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 72/383


JRootPane Glass Pane
▪ Por Omissão
▪ Invisível

▪ Quando Visível
▪ Está à frente dos outros painéis
▪ É Transparente
▪ Semelhante ao Vidro

▪ Capacidade
▪ Capturar Eventos de Entrada

▪ Interesse
▪ Capturar eventos do root pane numa área que contém múltiplos componentes gráficos
▪ Exemplo
▪ Desativar eventos do rato numa área com vários componentes
▪ Pintar área que contém múltiplos componentes gráficos
▪ Exemplo
▪ Mostrar imagem sobre vários componentes

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 73/383


JRootPane Barra de Menus
▪ Opcional

▪ Interesse
▪ Contentor de Menus

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 74/383


JRootPane Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JRootPane extends JComponent
implements Accessible { ... }

Object

AWT
Component

Container

JComponent Window

JRootPane Frame

JFrame
SWING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 75/383


JRootPane Construtores
Declaração Funcionalidade
public JRootPane() Cria painel JRootPane.
▪ Exemplo:
JRootPane rp = new JRootPane ();

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 76/383


JRootPane Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios

Declaração Funcionalidade
public void setJMenuBar(JMenuBar menubar) Especifica a barra de menus da janela.
public JMenuBar getJMenuBar() Retorna barra de menus.

public Container getContentPane() Retorna Content Pane.

public Component getGlassPane() Retorna Glass Pane.


public JLayeredPane getLayeredPane() Retorna Layered Pane.
public void setDefaultButton(JButton defaultButton) Especifica botão que será acionado quando
é premida tecla ENTER, independentemente
de ser, ou não, o foco do teclado.

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 77/383


JRootPane Bibliografia
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/rootpane.html

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 78/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 79/383
JScrollPane Interesse
▪ Visualizar Componente Gráfico Grande
▪ Área visualização < Área componente
▪ Deslocando vista
▪ Vertical
▪ Horizontal

▪ Exemplos

Imagem Caixa de Listagem


dentro de um dentro de um
JScrollPane JScrollPane

JList

Nelson Freire (ISEP–DEI-PPROG 2016/17) 80/383


JScrollPane Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JScrollPane extends JComponent
implements ScrollPaneConstants, Accessible { ... }

Object

AWT
Component

Container

JComponent Window

JScrollPane Frame

JFrame
SWING

JList

Nelson Freire (ISEP–DEI-PPROG 2016/17) 81/383


JScrollPane Construtores
Declaração Funcionalidade
public JScrollPane() Cria painel JScrollPane vazio, onde as
barras de deslocamento vertical e
▪ Exemplo: horizontal surgirão apenas quando forem
JScrollPane sp = new JScrollPane (); necessárias.

public JScrollPane( Component view ) Cria painel JScrollPane que mostra o


componente especificado, onde as
▪ Exemplo: barras de deslocamento vertical e
JList lstNomes = new Jlist(); horizontal surgirão sempre que o
… conteúdo do componente for maior do
JScrollPane sp = new JScrollPane ( lstNomes ); que a vista proporcionada.

JList

Nelson Freire (ISEP–DEI-PPROG 2016/17) 82/383


JScrollPane Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprio
▪ Exemplo

Declaração Funcionalidade
public void setWheelScrollingEnabled( boolean handleWheel ) Inibe/desinibe o deslocamento
controlado pelo movimento da
roda do rato.

JList

Nelson Freire (ISEP–DEI-PPROG 2016/17) 83/383


JScrollPane Bibliografia
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/scrollpane.html

JList

Nelson Freire (ISEP–DEI-PPROG 2016/17) 84/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 85/383
Tabbed Pane Introdução 1/6
▪ Componente Gráfico
▪ Objeto da classe JTabbedPane
▪ Interesse
▪ Permitir a múltiplos componentes partilharem a mesma área da GUI
▪ Exemplo
▪ Tabbed Pane permite partilha de área a:
▪ PainelListaTelefonica // adicionado ao separador (tab) Lista Telefónica
▪ PainelInicio // adicionado ao separador Início

Nelson Freire (ISEP–DEI-PPROG 2016/17) 86/383


Tabbed Pane Classe JTabbedPane 2/6
▪ Package
▪ javax.swing

▪ Declaração
public class JTabbedPane extends JComponent
implements Serializable, Accessible, SwingConstants { ... }

Object

Component

Container

JComponent

JTabbedPane

Nelson Freire (ISEP–DEI-PPROG 2016/17) 87/383


Tabbed Pane Construtores 3/6

Declaração Funcionalidade
public JTabbedPane( ) Constrói um tabbed pane vazio com o
▪ Exemplos: posicionamento dos separadores no
topo.
▪ JTabbedPane tabPane = new JTabbedPane();
▪ JTabbedPane tabPaneLista = new JTabbedPane();
public JTabbedPane( int tabPlacement ) Constrói um tabbed pane vazio com o
▪ Exemplo: posicionamento dos separadores
especificado;
▪ JTabbedPane tabPaneLista =
Opções tabPlacement:
new JTabbedPane( JTabbedPane.LEFT ); • JTabbedPane.TOP
• JTabbedPane.BOTTOM
• JTabbedPane.LEFT
• JTabbedPane.RIGHT
public JTabbedPane( int tabPlacement, int tabLayoutPolicy ) Constrói um tabbed pane vazio com o
▪ Exemplo: posicionamento dos separadores
especificado, com espaço e sem espaço,
▪ JTabbedPane tabPaneLista = new JTabbedPane( para visualizar todos (tabLayoutPolicy) ;
JTabbedPane.LEFT, Opções tabLayoutPolicy:
JTabbedPane. WRAP_TAB_LAYOUT); • JTabbedPane. WRAP_TAB_LAYOUT
• JTabbedPane. SCROLL_TAB_LAYOUT

Nelson Freire (ISEP–DEI-PPROG 2016/17) 88/383


Tabbed Pane Métodos 4/6
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios (1/2)
▪ Mais usados

Declaração Funcionalidade
public void addTab( String title, Component component ) Adiciona ao tabbed pane um
separador, sem imagem, com
▪ Exemplo: o título e o componente,
JTabbedPane tabPane = new JTabbedPane(); especificados;
Este componente é
tabPane.addTab( "Início", new PainelInicio() ); visualizado quando o título
do separador é clicado.
public void addTab( String title, Icon icon, Component component, String tip ) Adiciona ao tabbed pane um
separador com o título,
imagem, componente e dica,
especificados.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 89/383


Tabbed Pane Métodos 5/6
▪ Próprios (2/2)
Declaração Funcionalidade
public void insertTab( String title, Icon icon, Component component, Adiciona ao tabbed pane um
String tip, int index ) separador com o título, imagem,
componente e dica, especificados,
na posição indicada.
public void removeTabAt( int index ) Remove do tabbed pane o
separador na posição indicada.
public void removeAll() Remove do tabbed pane todos os
separadores e respectivos
componentes.
public void setSelectedIndex( int index ) Seleciona o separador do tabbed
pane indicado.

public void setSelectedComponent( Component c ) Seleciona o separador do tabbed


pane com o componente
especificado.
public void setEnabledAt( int index, boolean enabled ) Inibe ou desinibe o separador
indicado.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 90/383


Tabbed Pane Bibliografia 6/6

▪ https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 91/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 92/383
Classe Window Interesse
▪ Criar Janelas de Nível Superior
▪ Sem Moldura
▪ Sem Barra de Menus

Nelson Freire (ISEP–DEI-PPROG 2016/17) 93/383


Classe Window Declaração
▪ Package
▪ java.awt

▪ Declaração
public class Window extends Container
implements Accessible { … }

Object

Component AWT

Container

Window

Nelson Freire (ISEP–DEI-PPROG 2016/17) 94/383


Classe Window Métodos
▪ Herdados
▪ Component
▪ Container

▪ Próprios
Declaração Funcionalidade
public void pack() Modifica tamanho da Janela para mostrar
todos os componentes com o seu tamanho
preferido;
Deve ser chamado após adição de todos os
componentes.
public void dispose() Liberta todos os recursos nativos do monitor
usados pela janela, seus sub-componentes.
Fecha a aplicação no caso da janela ser a janela
principal da aplicação.
public void setLocationRelativeTo( Component c ) Chamada setLocationRelativeTo(null) coloca a
janela no centro do ecrã;
Deve ser invocado depois da definição do
tamanho da janela ( pack() ou setSize() ).
JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 95/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 96/383
Classe Frame Declaração
▪ Package
▪ java.awt

▪ Declaração
public class Frame extends Window
implements MenuContainer { … }

Object

Component AWT

Container

Window

Frame

Nelson Freire (ISEP–DEI-PPROG 2016/17) 97/383


Classe Frame Métodos
▪ Herdados
▪ Component
▪ Container
▪ Window

▪ Próprios
▪ Mais usados

Declaração Funcionalidade
public synchronized void setExtendedState( int state )
▪ Exemplo para maximizar janela:
setExtendedState(JFrame.MAXIMIZED_BOTH);

public void setUndecorated( boolean undecorated) Inibe/desinibe moldura da janela;


▪ Exemplo Só pode ser chamado quando a janela
não está visível.

JFrame

Nelson Freire (ISEP–DEI-PPROG 2016/17) 98/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 99/383
Classe JFrame Interesse
▪ Criar Janelas
▪ Contentores de Componentes Gráficos
▪ Nível Superior
▪ Não pode estar dentro de outro componente

▪ Exemplo
▪ Representação Gráfica

Ícone Barra de Título Botões

Moldura

Nelson Freire (ISEP–DEI-PPROG 2016/17) 100/383


Classe JFrame Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JFrame extends Frame
implements WindowConstants, Accessible, RootPaneContainer { ... }

Object

Component AWT

Container

Window

Frame

JFrame SWING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 101/383


Classe JFrame Estrutura Interna
▪ Janela JFrame é constituída por
▪ Moldura
▪ Painéis // contentores de componentes GUI

Moldura

Janela do tipo JFrame

Nelson Freire (ISEP–DEI-PPROG 2016/17) 102/383


Classe JFrame Painéis Próprios
▪ Janela JFrame contém
▪ Root Pane

Nelson Freire (ISEP–DEI-PPROG 2016/17) 103/383


Classe JFrame Moldura da Janela
▪ Formada pelos Componentes (Decorações)
▪ Barra de Título Barra de Título

▪ Botões Ícone Botões


▪ Minimizar
▪ Maximizar
▪ Fechar
Limites
▪ Ícone
▪ Limites
Janela do tipo JFrame

▪ Desenhada
▪ Pelo sistema de janelas do sistema operativo
▪ Swing
▪ Desenha tudo ... exceto moldura

Nelson Freire (ISEP–DEI-PPROG 2016/17) 104/383


Classe JFrame Construtores
▪ Criam Janelas
(0,0) X
▪ Invisíveis
▪ Tamanho 0
▪ Colocadas no canto superior (0,0)
esquerdo do ecrã
▪ ponto (0,0) do ecrã

Sistema de Coordenadas do Ecrã

▪ Declarações

Declaração Funcionalidade
public JFrame() throws HeadlessException Cria janela sem título.

public JFrame(String title) throws HeadlessException Cria janela com título title.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 105/383


Classe JFrame Métodos 1/2
▪ Herdados
▪ Component
▪ Container
▪ Window
▪ Frame

▪ Próprios (1/2)
▪ Mais usados

Declaração Funcionalidade
public void setResizable( boolean resizable ) setResizable(false) impede utilizador de
redimensionar janela.
public void setTitle( String title ) Modifica título da janela.
public void setJMenuBar(JMenuBar menubar) Especifica a barra de menus da janela.
public JMenuBar getJMenuBar() Retorna barra de menus.
public Container getContentPane() Retorna Content Pane.
public JRootPane getRootPane() Retorna Root Pane.
public Component getGlassPane() Retorna Glass Pane.
public JLayeredPane getLayeredPane() Retorna Layered Pane.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 106/383


Classe JFrame Métodos 2/2
▪ Próprios (2/2)

Declaração Funcionalidade
public void setDefaultCloseOperation(int operation) Define operação que ocorrerá, por omissão,
quando utilizador inicia fecho da janela no botão
▪ Exemplo: close da moldura;
setDefaultCloseOperation(EXIT_ON_CLOSE)
Operações à escolha
DO_NOTHING_ON_CLOSE // Não faz nada
HIDE_ON_CLOSE // Esconde janela
DISPOSE_ON_CLOSE // Fecha janela
EXIT_ON_CLOSE // Termina aplicação
Por omissão, o botão close da janela executa a
operação HIDE_ON_CLOSE.
Notas
▪ Janela e lógica do programa são executados
em threads diferentes;
▪ Aplicação gráfica pode ter o programa em
execução sem GUI visível.

JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 107/383


Classe JFrame Exemplo 1/4

public class ContadorGUI extends JFrame {


private static final int JANELA_LARGURA = 270;
private static final int JANELA_ALTURA = 150;
public ContadorGUI() {
super("Contador de Cliques");

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}

public class Main {


public static void main(String[] args) {
new ContadorGUI ();
}
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 108/383


Classe JFrame Exemplo 2/4
▪ Cor de fundo da Janela
public class DemoJanela extends JFrame {
▪ É do Content Pane
private static final int JANELA_LARGURA = 300;
private static final int JANELA_ALTURA = 200;
public DemoJanela() {
super("Demo Janela");
getContentPane().setBackground( Color.CYAN );

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}

public class Main {


public static void main(String[] args) {
new DemoJanela();
}
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 109/383


Classe JFrame Exemplo 3/4
▪ Janela sem Moldura

public class DemoJanelaSemMoldura extends JFrame {


private static final int JANELA_LARGURA = 270;
private static final int JANELA_ALTURA = 150;
public DemoJanelaSemMoldura () {
super("Demo Janela Sem Moldura");
setUndecorated(true);

setSize(JANELA_LARGURA , JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}

public class Main {


public static void main(String[] args) {
new DemoJanelaSemMoldura ();
}
}
Frame

Nelson Freire (ISEP–DEI-PPROG 2016/17) 110/383


Classe JFrame Exemplo 4/4
// Exemplo: Imagem de Fundo de uma Janela
public class DemoJanela extends JFrame {
private static final int JANELA_LARGURA = 300;
private static final int JANELA_ALTURA = 200;
public DemoJanela() {
super("Demo Janela");
PainelFundo pf = new PainelFundo();
add(pf);
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(JANELA_LARGURA, JANELA_ALTURA);
setResizable(false);
setVisible(true);
}
private class PainelFundo extends JPanel {
public void paintComponent(Graphics g) { // método reescrito; desenha componentes do painel
super.paintComponent(g);
Dimension dimensaoPainel = getSize(); // para redimensionar imagem à medida do painel
double largura = dimensaoPainel.getWidth();
double altura = dimensaoPainel.getHeight();
ImageIcon i1 = new ImageIcon("isep_logo.jpg"); // imagem guardada na pasta do aplicação
Image i2 = i1.getImage().getScaledInstance( (int) largura, (int) altura, Image.SCALE_SMOOTH );
Image i3 = new ImageIcon( i2 ).getImage();
g.drawImage(i3, 0, 0, this); //a partir de (0,0)
Especifica algoritmo para redimensionar a imagem.
}
Há várias opções:
} ▪ P.ex.: SCALE_FAST e SCALE_AREA_AVERAGING
} ▪ Escolha entre rapidez e qualidade da imagem

Nelson Freire (ISEP–DEI-PPROG 2016/17) 111/383


Classe JFrame Resolução do Ecrã
▪ Interesse
▪ Definir dimensões e posição da janela

import java.awt.Toolkit;

Toolkit tk = Toolkit.getDefaultToolkit(); // getDefaultToolkit é método estático
Dimension screenSize = tk.getScreenSize();
int screenWidth = screenSize.width;
int screenHeight = screenSize.height;

Nelson Freire (ISEP–DEI-PPROG 2016/17) 112/383


Classe JFrame Eventos 1/4

Tipos de Evento que Janela pode Gerar (1/2) Evento


Componente adicionado à janela
Container
Componente removido da janela
Janela escondida
Janela mostrado
Component
Janela movido
Janela redimensionado
Janela adquire o foco
Focus
janela perde o foco
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou na janela
Rato saiu da janela
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida

Nelson Freire (ISEP–DEI-PPROG 2016/17) 113/383


Classe JFrame Eventos 2/4

Tipos de Evento que Janela pode Gerar (2/2) Evento


Janela abriu
Janela fechou
Janela ficou activa
Window Janela ficou inactiva
Janela ficou minimizada
Janela ficou restaurada (tamanho original)
Utilizador quer fechar Janela

Nelson Freire (ISEP–DEI-PPROG 2016/17) 114/383


Botão de
Comando Eventos 3/4
▪ Evento Window (1/2)
▪ Tratamento
▪ Realizado
▪ Objetos de classes que implementem o interface WindowListener
▪ Métodos de Evento
▪ windowOpened( WindowEvent e)
▪ windowClosed( WindowEvent e)
▪ windowActivated( WindowEvent e)
▪ windowDeactivated( WindowEvent e)
▪ windowIconified( WindowEvent e)
▪ windowDeiconified( WindowEvent e)
▪ windowClosing( WindowEvent e)
▪ Alguns eventos
▪ Classe WindowAdapter
▪ implementa interface WindowListener
▪ Exemplo
private class TrataEvento extends WindowAdapter {
public void windowClosing( WindowEvent e) { … } // método reescrito
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 115/383


Botão de
Comando Eventos 4/4
▪ Evento Window (2/2)
▪ Registo de objetos TrataEvento // objetos designados event listeners

Declaração Funcionalidade
public void addWindowListener( WindowListener l ) Regista objeto para tratar
evento do tipo Window.
▪ Exemplo:
public class Janela extends JFrame {
public Janela() {
super("Demo");
...
addWindowListener( new TrataEvento() );
}
private class TrataEvento extends WindowAdapter {
@Override
public void windowClosing( WindowEvent e) {

}
}
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 116/383


Classe JFrame Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 117/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 118/383
Hierarquia
de Classes Hierarquia de Classes de Contentores de Componentes Gráficos
Object

SWING AWT
Component

Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane

JLabel JFileChooser

JSeparator JMenuBar AbstractButton JPanel JScrollPane JTextComponent

JMenuItem JToggleButton JButton JTabbedPane JTextField JTextArea

JMenu JRadioButton JCheckBox JPasswordField JFormattedTextField

Legenda: Classe Abstrata Classe Instanciável Exercícios PPROG – Caixas de Diálogo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 119/383


Caixas de Diálogo Introdução 1/4
▪ Noção de Caixa de Diálogo
▪ Componente GUI
▪ Separado da janela da aplicação // não contido na janela
▪ Interesse
▪ Ler Dados
Utilizador
▪ Mostrar Informação

Exemplos de Caixas de Diálogo


▪ Entrada
▪ Saída

▪ Dependente de Janelas
▪ Destruição de janela  destruição das caixas de diálogo dependentes
▪ Minimização de janela  esconde caixas de diálogo dependentes
▪ Abertura de janela minimizada  mostra caixas de diálogo dependentes
Nelson Freire (ISEP–DEI-PPROG 2016/17) 120/383
Caixas de Diálogo Introdução 2/4
▪ Tipos de Funcionamento
▪ Modal
▪ Modeless

▪ Caixa Modal
▪ Bloqueia acesso do utilizador à janela pai (criadora da caixa)
▪ Interesse
▪ Obrigar utilizador a interagir com caixa de diálogo
▪ Indispensável para execução da aplicação

Caixa de Diálogo Modal

▪ Caixa Modeless
▪ Não bloqueia acesso do utilizador à janela pai
▪ Interesse
▪ Permitir ao utilizador a introdução de dados
na janela pai

Caixa de Diálogo Modeless

Nelson Freire (ISEP–DEI-PPROG 2016/17) 121/383


Caixas de Diálogo Introdução 3/4
▪ Tipos de Caixas de Diálogo
▪ Nativas
▪ Próprias
▪ Nativas
▪ JColorChooser
▪ JFileChooser
▪ JOptionPane
▪ Tipo Modal
▪ Permite diálogos simples
▪ Ex:

▪ Próprias
▪ Para Diálogos
▪ Personalizados
▪ Mais complexos
▪ Permite Tipo Modeless
▪ Classes derivadas da classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 122/383
Caixas de Diálogo Introdução 4/4
▪ Bibliografia
▪ http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 123/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 124/383
JOptionPane Classe JOptionPane
▪ Package
▪ javax.swing

▪ Declaração
public class JOptionPane extends JComponent
implements Accessible { ... }

Object

Component

Container

JComponent Window

JOptionPane Frame Dialog

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 125/383


JOptionPane Interesse
▪ Criar Caixas de Diálogo
▪ Para diálogos com utilizador
▪ Simples

▪ Permitem
▪ Ler
Informação - Utilizador
▪ Mostrar

▪ Funcionamento
▪ Modal

Nelson Freire (ISEP–DEI-PPROG 2016/17) 126/383


JOptionPane Tipos de Caixas JOptionPane

Caixa de Mensagem
▪ Componentes das Caixas
(Mostrar mensagem)
▪ Comuns
▪ Título
▪ Ícone
Caixa de Confirmação ▪ Identifica tipo mensagem
(Utilizador confirmar ação) ▪ Mensagem
▪ Pode ser contentor JPanel
▪ Um ou mais botões de opção
▪ OK
Caixa de Entrada ▪ Yes, Cancel, No
(Ler dados do utilizador) ▪ Sim, Cancelar, Não
▪ Específicos
▪ TextField // Entrada Texto
Caixa de Opção
▪ ComboBox // Escolha Objetos
(Utilizador escolher opção
▪ Opções personalizadas
▪ Podem ser objetos)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 127/383


JOptionPane Criação de Caixas JOptionPane 1/2
▪ Usando Métodos de Classe (static)
▪ JOptionPane.showMessageDialog(...) ▪ JOptionPane.showConfirmDialog(...)

Caixa de Mensagem Caixa de Confirmação

▪ JOptionPane.showInputDialog(...) ▪ JOptionPane.showOptionDialog(...)

Caixa de Entrada Caixa de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 128/383


JOptionPane Criação de Caixas JOptionPane 2/2
▪ Constantes para especificar parâmetros comuns
▪ Tipos de mensagem
JOptionPane.ERROR_MESSAGE
JOptionPane.INFORMATION_MESSAGE
JOptionPane.WARNING_MESSAGE
JOptionPane.QUESTION_MESSAGE Caixa de Mensagem
JOptionPane.PLAIN_MESSAGE sem ícone
▪ Tipos de Opções
JOptionPane.DEFAULT_OPTION
JOptionPane.OK_CANCEL_OPTION
JOptionPane.YES_NO_OPTION
JOptionPane.YES_NO_CANCEL_OPTION
Caixa de Confirmação
▪ Valores retornados (valores inteiros)
JOptionPane.OK_OPTION
JOptionPane.CANCEL_OPTION
JOptionPane.YES_OPTION
JOptionPane.NO_OPTION

Caixa de Entrada

Nelson Freire (ISEP–DEI-PPROG 2016/17) 129/383


JOptionPane Caixa de Mensagem
▪ Funcionalidade
▪ Mostra mensagem e espera pelo OK
▪ Não retorna nada
▪ Mensagem pode ser um componente GUI

▪ Declarações de Métodos
public static void showMessageDialog( Component parent,
Object message ) Definição do parâmetro
parent garante caixa de
public static void showMessageDialog( Component parent, diálogo sobre (frente) esse
Object message, componente
String title,
int messageType)
public static void showMessageDialog( Component parent,
Object message,
String title,
int messageType,
Icon icon )
▪ Exemplo
JFrame janela = new JFrame("Biblioteca de Livros");

JOptionPane.showMessageDialog( janela, "Livro guardado com sucesso", “Guardar Livro",
JOptionPane.INFORMATION_MESSAGE);

Nelson Freire (ISEP–DEI-PPROG 2016/17) 130/383


JOptionPane Caixa de Confirmação 1/2
▪ Funcionalidade
▪ Mostra mensagem e retorna confirmação
▪ Confirmação = inteiro
▪ Declarações Métodos
public static int showConfirmDialog( Component parent,
Object message )
public static int showConfirmDialog( Component parent,
Object message,
String title,
int optionType)
public static int showConfirmDialog( Component parent,
Object message,
String title,
int optionType,
int messageType)
public static int showConfirmDialog( Component parent,
Object message,
String title,
int optionType,
int messageType,
Icon icon )
Nelson Freire (ISEP–DEI-PPROG 2016/17) 131/383
JOptionPane Caixa de Confirmação 2/2
▪ Opções para testar o retorno
▪ JOptionPane.OK_OPTION
▪ JOptionPane.CANCEL_OPTION
▪ JOptionPane.YES_OPTION
▪ JOptionPane.NO_OPTION

▪ Exemplo

JFrame janela = new JFrame();



int resposta = JOptionPane.showConfirmDialog( janela, "Eliminar Livro?", "Biblioteca de Livros",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE) ;
If( resposta == OptionPane.YES_OPTION )
livro.eliminar();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 132/383


JOptionPane Caixa de Entrada 1/3
▪ Funcionalidade
▪ Mostra mensagem e um dos seguintes componentes
▪ TextField
▪ Retorna texto inserido pelo utilizador

Caixa de Entrada (Texto)

▪ ComboBox
▪ Retorna objeto escolhido pelo utilizador
▪ Exemplos
▪ Livro, Carro, Trabalhador, etc.
▪ Objetos são fornecidos num array
Caixa de Entrada (Objeto)
▪ Tipo de array
▪ Pode ser qualquer tipo referência
▪ Exemplo
String[] livros = {"Java 6", "Big Java"};
Livro[] livros = { new Livro("Java 6"), new Livro("Big Java") }
Nelson Freire (ISEP–DEI-PPROG 2016/17) 133/383
JOptionPane Caixa de Entrada 2/3
▪ Declarações Métodos
public static String showInputDialog( Object message )
public static String showInputDialog( Component parent,
Object message )
public static String showInputDialog( Object message,
Object initialSelectionValue )
public static String showInputDialog( Component parent,
Object message, Caixa de Entrada (Texto)
Object initialSelectionValue )
public static String showInputDialog( Component parent,
Object message,
String title,
int messageType )

public static Object showInputDialog(Component parent,


Object message,
String title,
int messageType,
Icon icon,
Object[] selectionValues,
Object initialSelectionValue ) Caixa de Entrada (Objeto)
Nelson Freire (ISEP–DEI-PPROG 2016/17) 134/383
JOptionPane Caixa de Entrada 3/3
▪ Exemplos

JFrame janela = new JFrame();



String autor = JOptionPane.showInputDialog( janela,"Autor do Livro:", "Biblioteca de Livros",
JOptionPane.QUESTION_MESSAGE);

JFrame janela = new JFrame();



String[ ] opcoes = {"Java 6", "Big Java", "Core Java"};
String livro = JOptionPane.showInputDialog( janela, "Escolha o Livro:", "Biblioteca de Livros",
JOptionPane.PLAIN_MESSAGE, null,
opcoes, opcoes[0]);

Nelson Freire (ISEP–DEI-PPROG 2016/17) 135/383


JOptionPane Caixa de Opção 1/2
▪ Funcionalidade
▪ Mostra uma mensagem e retorna a opção escolhida

▪ Botões de Opção
▪ Podem ser personalizados
▪ Definidos através de array de qualquer tipo referência Caixa de Opção
▪ Retorna
▪ Índice de array da opção escolhida

▪ Declaração de Método
public static int showOptionDialog( Component parent,
Object message,
String title,
int optionType, // irrelevante para options ≠ null
int messageType,
Icon icon, // personaliza ícone
Object[] options,
Object initialValue ) // botão que adquire o foco (omissão)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 136/383


JOptionPane Caixa de Opção 2/2
▪ Exemplo

Caixa de Opção

JFrame janela = new JFrame();



String[] opcoes = {"Opção 1", "Opção 2", "Opção 3", "Opção 4"};
int resposta = JOptionPane.showOptionDialog( janela, "mensagem", "Título", 0,
JOptionPane.INFORMATION_MESSAGE,
null,
opcoes,
opcoes[1] );
switch (resposta){
case 0: … ; break;
case 1: … ; break;
case 2: … ; break;
case 3: … ;
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 137/383


JOptionPane Bibliografia

▪ http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 138/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 139/383
JFileChooser Caixas de Diálogo File Chooser
▪ Criadas
▪ Por objetos da classe JFileChooser
▪ Interesse
▪ Navegação no Sistema de Ficheiros para apoiar operações de (p.ex.):
▪ Abertura de ficheiro/pasta
Caixa open permite escolher
▪ Pasta
▪ Ficheiro para abrir

Processamento do ficheiro
ou da pasta escolhida
▪ Responsabilidade da
aplicação

Caixa save permite escolher


▪ Gravação de ficheiros ▪ Pasta para gravar
ficheiros

Gravação de ficheiros
▪ Responsabilidade da
aplicação

Nelson Freire (ISEP–DEI-PPROG 2016/17) 140/383


JFileChooser Funcionamento das Caixas de Diálogo File Chooser
▪ Modal
▪ Bloqueia acesso do utilizador à janela pai // janela criadora da caixa
▪ Obriga utilizador a interagir com caixa
▪ Para regressar à janela pai da caixa

Caixa de Diálogo
Modal

Janela Pai
inacessível
ao utilizador

Nelson Freire (ISEP–DEI-PPROG 2016/17) 141/383


JFileChooser Tipos de Caixas de Diálogo File Chooser
▪ Há 3 Tipos
▪ Abertura de Ficheiro/Pasta
▪ Gravação de Ficheiro
▪ Personalizada // para outras tarefas (não abrir/gravar )
// Ex: anexar ficheiro num e-mail ; executar aplicação

▪ Caixas de Diálogo File Chooser


▪ Criadas por objetos da classe JFileChooser

Nelson Freire (ISEP–DEI-PPROG 2016/17) 142/383


JFileChooser Declaração da Classe JFileChooser
▪ Package
▪ javax.swing

▪ Declaração
public class JFileChooser extends JComponent
implements Accessible { ... }

Object

Component

Container

JComponent Window

JFileChooser Frame Dialog

JFrame JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 143/383


JFileChooser Construtores
▪ Mais usados

Declaração Funcionalidade
public JFileChooser() Constrói objeto JFileChooser usando a
pasta do utilizador, por omissão.
▪ Exemplo:
JFileChooser fc = new JFileChooser(); Esta pasta depende do sistema operativo:
▪ Windows: "Meus Documentos"
▪ Unix: "Home"

public JFileChooser(String currentDirectoryPath) Constrói objeto JFileChooser usando a


pasta especificada através de uma string.
▪ Exemplo:
JFileChooser fc = new JFileChooser("c:/MeuProjeto"); Parâmetro null especifica pasta do
utilizador por omissão.
public JFileChooser(File currentDirectory) Constrói objecto JFileChooser usando a
pasta especificada através de objeto File.
▪ Exemplo:
File f = new File("c:/MeuProjeto"); Parâmetro null especifica pasta do
utilizador por omissão.
JFileChooser fc = new JFileChooser( f );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 144/383


JFileChooser Métodos 1/6
▪ Herdados
▪ Component
▪ Container
▪ JComponent

Nelson Freire (ISEP–DEI-PPROG 2016/17) 145/383


JFileChooser Métodos 2/6
▪ Próprios – Mostrar Caixa de Diálogo
Declaração Funcionalidade
public int showOpenDialog(Component parent) Mostra caixa de diálogo JFileChooser
▪ Exemplo: para abrir um ficheiro.
JFileChooser fc = new JFileChooser(); Valores de retorno (tipo int):
int resp = fc.showOpenDialog(this); // this=janela pai ▪ JFileChooser.APPROVE_OPTION
if( resp == JFileChooser.APPROVE_OPTION) ▪ JFileChooser.CANCEL_OPTION
.... ▪ JFileChooser.ERROR_OPTION
public int showSaveDialog(Component parent) Mostra caixa de diálogo JFileChooser
▪ Exemplo: para gravar ficheiro.
JFileChooser fc = new JFileChooser(); Valores de retorno (tipo int):
int resp = fc.showSaveDialog(this); // this=janela pai ▪ JFileChooser.APPROVE_OPTION
if( resp == JFileChooser.APPROVE_OPTION) ▪ JFileChooser.CANCEL_OPTION
.... ▪ JFileChooser.ERROR_OPTION
public int showDialog(Component parent, String approveButtonText) Mostra caixa JFileChooser com título e
▪ Exemplo: botão approve personalizados.
JFileChooser fc = new JFileChooser(); Valores de retorno (tipo int):
int resp = fc.showDialog(this, "Anexar"); ▪ JFileChooser.APPROVE_OPTION
if( resp == JFileChooser.APPROVE_OPTION) ▪ JFileChooser.CANCEL_OPTION
.... ▪ JFileChooser.ERROR_OPTION

Nelson Freire (ISEP–DEI-PPROG 2016/17) 146/383


JFileChooser Métodos 3/6
▪ Próprios (mais usados)
▪ Para obter:
▪ Ficheiro/Pasta (Diretório) selecionado pelo utilizador

Declaração Funcionalidade
public File getSelectedFile() Retorna objeto File que descreve o
ficheiro selecionado.
▪ Exemplo:
JFileChooser fc = new JFileChooser();
int resp = fc.showOpenDialog( this ); // this=janela pai
if( resp == JFileChooser.APPROVE_OPTION)
File f = fc.getSelectedFile();
...

Nelson Freire (ISEP–DEI-PPROG 2016/17) 147/383


JFileChooser Métodos 4/6
▪ Próprios (mais usados) – Configuração da Caixa de Diálogo (1/3)
▪ Para visualizar:
▪ Ficheiros e pastas // por omissão
▪ Só ficheiros / só pastas
▪ Ficheiros escondidos // por omissão não visualizados
Declaração Funcionalidade
public void setFileSelectionMode( int mode ) Especifica os tipos de ficheiros que podem
ser selecionados.
▪ Exemplo:
JFileChooser fc = new JFileChooser(); Tipos de Ficheiros:
fc. setFileSelectionMode( JFileChooser.FILES_ONLY ); ▪ JFileChooser.DIRECTORIES_ONLY
▪ JFileChooser.FILES_ONLY
▪ JFileChooser.FILES_AND_DIRECTORIES
Por omissão:
▪ JFileChooser.FILES_AND_DIRECTORIES
public void setFileHidingEnabled( boolean b ) Especifica se os ficheiros escondidos devem
ser visualizados.
▪ Exemplo:
JFileChooser fc = new JFileChooser(); b = false:
▪ Para visualizar ficheiros escondidos.
fc.setFileHidingEnabled( false ); /* mostrar ficheiros
escondidos */ Por omissão:
▪ Ficheiros escondidos não visualizados

Nelson Freire (ISEP–DEI-PPROG 2016/17) 148/383


JFileChooser Métodos 5/6
▪ Próprios (mais usados) – Configuração da Caixa de Diálogo (2/3)
▪ Para definir filtro por omissão

Declaração Funcionalidade
public File setFileFilter( FileFilter filter ) Define o filtro de ficheiros atual.
▪ FileFilter O filtro de ficheiros é usado na vista do
public abstract class FileFilter { utilizador.
// Indica se o ficheiro f é aceite pelo filtro. Exemplo:
public abstract boolean accept( File f );

// Retorna descrição do filtro. Exemplo:


"*.bin"
public abstract String getDescription();
}
▪ Exemplo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 149/383


JFileChooser Métodos 6/6
▪ Próprios (mais usados) – Configuração da Caixa de Diálogo (3/3)
▪ Para definir filtros de tipos de ficheiros
▪ Todos os ficheiros // mostrado por omissão
▪ Próprios
Declaração Funcionalidade
public void setAcceptAllFileFilterUsed( boolean b ) Especifica se o filtro "All Files"
▪ Exemplo: ("Todos os Ficheiros") é opção
disponível na lista de filtros.
JFileChooser fc = new JFileChooser();
Este filtro é disponibilizado por
omissão.
fc. setAcceptAllFileFilterUsed( false );

public void addChoosableFileFilter( FileFilter filter ) Adiciona um filtro à lista de filtros


de ficheiros.
▪ Exemplo:
Exemplo:
JFileChooser fc = new JFileChooser();
MyFileFilter filtroPDF = new MyFileFilter("pdf"); MyFileFilter
extends
MyFileFilter filtroTXT = new MyFileFilter("txt");
FileFilter
fc.addChoosableFileFilter( filtroPDF );
fc.addChoosableFileFilter( filtroTXT );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 150/383


JFileChooser Personalizar em Português Caixas de Diálogo File Chooser
▪ Método da classe UIManager (javax.swing)
▪ UIManager: responsável pelo estilo (Look and Feel) atual dos components gráficos.
▪ public static Object put(Object key, Object value);
▪ Exemplos:

▪ Lista de opções completa:


▪ http://www.java2s.com/Tutorial/Java/0240__Swing/CustomizingaJFileChooserLookandFeel.htm
Nelson Freire (ISEP–DEI-PPROG 2016/17) 151/383
JFileChooser Exemplo: Abertura de Ficheiro 1/2
▪ Ficheiro de Texto
▪ Lido para área de texto // JTextArea

Nelson Freire (ISEP–DEI-PPROG 2016/17) 152/383


JFileChooser Exemplo: Abertura de Ficheiro 2/2

Nelson Freire (ISEP–DEI-PPROG 2016/17) 153/383


JFileChooser Exemplo: Gravação de Ficheiro

Nelson Freire (ISEP–DEI-PPROG 2016/17) 154/383


JFileChooser Filtrar Lista de Diretórios e Ficheiros 1/2
▪ Exemplo – Filtrar Diretórios e Ficheiros *.txt (usando objeto FileFilter)
Por omissão
▪ Uma file chooser lista
todos os diretórios e
ficheiros não escondidos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 155/383


JFileChooser Filtrar Lista de Diretórios e Ficheiros 2/2
▪ Exemplo – Adicionar Múltiplos Filtros

Nelson Freire (ISEP–DEI-PPROG 2016/17) 156/383


JFileChooser Mostrar Diálogos Abrir e Guardar com um só Objeto JFileChooser
▪ Vantagens
▪ Diálogos partilharem automaticamente a mesma pasta atual
▪ Objeto FileChooser memoriza pasta atual
▪ Exemplo
▪ Guardar ficheiro seguido de Abrir ficheiro

▪ Só é necessário personalizar um objeto


▪ Personalização aplica-se a ambos os diálogos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 157/383


JFileChooser Bibliografia

▪ http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 158/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 159/383
Classe Dialog Declaração
▪ Package
▪ java.awt

▪ Declaração
public class Dialog extends Window { … }

Object

AWT
Component

Container

JComponent Window

JOptionPane Dialog

JDialog
SWING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 160/383


Classe Dialog Construtores
Declaração Funcionalidade
public Dialog( Frame owner, String title, boolean modal ) Cria caixa de diálogo invisível, com a
janela pai, título e tipo de
funcionamento (true=modal ou
false=modeless) especificados.
public Dialog( Frame owner, String title ) Cria caixa de diálogo invisível e modeless,
com a janela pai e título especificados.

public Dialog( Frame owner, boolean modal ) Cria caixa de diálogo invisível e sem
título, com janela pai e tipo de
funcionamento (true=modal ou
false=modeless) especificados.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 161/383


Classe Dialog Métodos
▪ Herdados
▪ Component
▪ Container
▪ Window

▪ Próprios
Declaração Funcionalidade
public void setBackground(Color bgColor) Especifica cor de fundo da caixa de diálogo.
▪ Exemplo:
getContentPane().setBackground(Color.RED);
public void setResizable(boolean resizable) setResizable(false) impede utilizador de
redimensionar janela.
public void setTitle(String title) Modifica título da caixa de diálogo.
public void setVisible(boolean b) Mostra ( setVisible(true) ) ou esconde
( setVisible(false) ) caixa de diálogo.
public void setUndecorated(boolean undecorated) Inibe/desinibe moldura da caixa de diálogo;
Só pode ser chamado quando a caixa de
diálogo não está visível.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 162/383


Contentores Sumário
▪ Contentores de Componentes Gráficos
▪ Painéis
▪ Noção de Painel
▪ Classe JPanel
▪ Classe JLayeredPane
▪ Classe JRootPane
▪ Classe JScrollPane
▪ Classe JTabbedPane
▪ Superclasse Window
▪ Janelas
▪ Superclasse Frame
▪ Classe JFrame
▪ Caixas de Diálogo
▪ Introdução
▪ Classe JOptionPane
▪ Classe JFileChooser
▪ Próprias
▪ Superclasse Dialog
▪ Classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 163/383
Classe JDialog Interesse
▪ Criar Caixas de Diálogo Próprias
▪ Para diálogos
▪ Personalizados
▪ Mais complexos
▪ Tipo
▪ Modal
▪ Modeless

▪ Exemplo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 164/383


Classe JDialog Estrutura Interna
▪ Semelhante à da JFrame
▪ Contém
▪ Root Pane

Nelson Freire (ISEP–DEI-PPROG 2016/17) 165/383


Classe JDialog Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JDialog extends Dialog
implements WindowConstants, Accessible, RootPaneContainer,
TransferHandler.HasGetTransferHandler { … }

Object

AWT
Component

Container

JComponent Window

JOptionPane Dialog

JDialog
SWING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 166/383


Classe JDialog Construtores
▪ Mais Usados

Declaração Funcionalidade
public JDialog( Frame owner, String title, boolean modal) Cria caixa de diálogo invisível, com a
janela pai, título e tipo de
funcionamento (true=modal ou
false=modeless) especificados.
public JDialog( Frame owner, String title ) Cria caixa de diálogo invisível e modeless,
com a janela pai e título especificados.

public JDialog( Frame owner, boolean modal) Cria caixa de diálogo invisível e sem
título, com janela pai e tipo de
funcionamento (true=modal ou
false=modeless) especificados.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 167/383


Classe JDialog Métodos
▪ Herdados
▪ Component
▪ Container
▪ Window
▪ Dialog

▪ Próprios

Declaração Funcionalidade
Especifica o gestor de posicionamento do
public void setLayout(LayoutManager manager)
Content Pane.
public void setJMenuBar(JMenuBar menuBar) Especifica a barra de menus da caixa de diálogo.

public JRootPane getRootPane() Retorna Root Pane.

public JLayeredPane getLayeredPane() Retorna Layered Pane.

public Component getGlassPane() Retorna Glass Pane.

public Container getContentPane() Retorna Content Pane.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 168/383


Classe JDialog Métodos
▪ Próprios (2/2)

Declaração Funcionalidade
public void setDefaultCloseOperation(int operation) Especifica operação que ocorrerá, por
omissão, quando utilizador inicia fecho da
▪ Exemplo: caixa de diálogo (botão close da moldura);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE) Operações à escolha:
DO_NOTHING_ON_CLOSE // Não faz nada
HIDE_ON_CLOSE // Esconde caixa
DISPOSE_ON_CLOSE // Fecha caixa
Por omissão, botão close executa a operação
HIDE_ON_CLOSE.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 169/383


Classe JDialog Implementação de Caixa de Diálogo 1/10
▪ Procedimento
1. Criar nova classe derivada da classe JDialog

Nelson Freire (ISEP–DEI-PPROG 2016/17) 170/383


Classe JDialog Implementação de Caixa de Diálogo 2/10
▪ Procedimento
2. Criar construtor da nova classe ... Com parâmetro tipo JFrame
▪ Parâmetro tipo JFrame para
▪ Receber janela pai da caixa de diálogo
▪ Permitir caixa mostrada sempre sobre essa janela

Nelson Freire (ISEP–DEI-PPROG 2016/17) 171/383


Classe JDialog Implementação de Caixa de Diálogo 3/10
▪ Procedimento
3. No construtor, invocar o construtor da superclasse JDialog
▪ Argumentos definem propriedades da caixa:
▪ Janela pai
▪ Título
▪ Tipo de funcionamento
▪ modal // true
▪ modeless // false

Nelson Freire (ISEP–DEI-PPROG 2016/17) 172/383


Classe JDialog Implementação de Caixa de Diálogo 4/10
▪ Procedimento
4. Definir a localização da caixa de diálogo
▪ Relativa à janela pai

Nelson Freire (ISEP–DEI-PPROG 2016/17) 173/383


Classe JDialog Implementação de Caixa de Diálogo 5/10
▪ Procedimento
5. Tornar a caixa de diálogo visível

Nelson Freire (ISEP–DEI-PPROG 2016/17) 174/383


Classe JDialog Implementação de Caixa de Diálogo 6/10
▪ Procedimento
6. Adicionar componentes gráficos à caixa de diálogo (1/3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 175/383


Classe JDialog Implementação de Caixa de Diálogo 7/10
▪ Procedimento
6. Adicionar componentes GUI à caixa de diálogo (2/3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 176/383


Classe JDialog Implementação de Caixa de Diálogo 8/10
▪ Procedimento
6. Adicionar componentes GUI à caixa de diálogo (3/3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 177/383


Classe JDialog Implementação de Caixa de Diálogo 9/10
▪ Procedimento
7. Criar e registar objetos para tratarem os eventos gerados
pelos botões de comando da caixa de diálogo (1/2)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 178/383


Classe JDialog Implementação de Caixa de Diálogo 10/10
▪ Procedimento
7. Criar e registar objetos para tratarem os eventos gerados
pelos botões de comando da caixa de diálogo (2/2)

Transferência de Dados
Para a classe Dados,
responsável pelo
armazenamento de
dados da aplicação.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 179/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 180/383


Componentes
Informação Sumário
▪ Apresentação de Informação
▪ Classe JLabel
▪ Classe JSeparator
▪ Classe JTable

Nelson Freire (ISEP–DEI-PPROG 2016/17) 181/383


Hierarquia
de Classes Hierarquia de Classes de Apresentação de Informação
Object

SWING AWT
Component

Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane

JLabel JFileChooser

JSeparator JMenuBar AbstractButton JPanel JScrollPane JTextComponent

JMenuItem JToggleButton JButton JTabbedPane JTextField JTextArea

JMenu JRadioButton JCheckBox JPasswordField JFormattedTextField

Legenda: Classe Abstrata Classe Instanciável Exercícios PPROG – Apresentação de informação

Nelson Freire (ISEP–DEI-PPROG 2016/17) 182/383


Classe JLabel Interesse
▪ Apresentação Não-Editável
▪ Texto
▪ Simples // Linha de Texto

▪ Formatado (HTML) // JLabel c/ Bordo

▪ Imagem

▪ Texto e Imagem

Nelson Freire (ISEP–DEI-PPROG 2016/17) 183/383


Classe JLabel Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JLabel extends JComponent
implements SwingConstants, Accessible { ... }

Object

Component

Container

JComponent

JLabel

Nelson Freire (ISEP–DEI-PPROG 2016/17) 184/383


Classe JLabel Construtores 1/2

Declaração Funcionalidade
public JLabel() Cria objeto
JLabel sem
▪ Exemplo imagem e sem
JLabel lbl = new JLabel(); texto.
public JLabel(String text) Cria objeto
JLabel com
▪ Exemplo Texto Simples texto
JLabel lblAguia = new JLabel("Águia"); especificado,
alinhado à
▪ Exemplo Texto Formatado
esquerda e
String texto = "<html>As aves de rapina são aves carnívoras que compartilham "+ centrado na
" <P> características semelhantes, bicos recurvados e " + vertical.
" <P> pontiagudos, garras fortes e visão de longo alcance." +
" <P> Exemplos:" +
"<UL>" +
" <LI>Águia" +
" <LI>Falcão" +
" <LI>Abutre" +
" <LI>Milhafre" +
"</UL></html>";
JLabel lblAvesRapina = new JLabel( texto );
lblAvesRapina.setBorder( BorderFactory.createTitledBorder( "Aves de Rapina" ) );
Nelson Freire (ISEP–DEI-PPROG 2016/17) 185/383
Classe JLabel Construtores 2/2

Declaração Funcionalidade
public JLabel( String text, int horizontalAlignment ) Cria objeto JLabel com
texto especificado,
▪ Exemplos: centrado na vertical e
JLabel lblAguia = new JLabel( "Águia", SwingConstants.RIGHT ); com alinhamento
JLabel lblAguia = new JLabel("Águia", JLabel.RIGHT ); horizontal especificado.

public JLabel( Icon image ) Cria objeto JLabel com


imagem especificada,
▪ Exemplo: centrada na vertical e
JLabel lblAguia = new JLabel( new ImageIcon("aguia.jpg") ); horizontal.
public JLabel( Icon image, int horizontalAlignment ) Cria objeto JLabel com
imagem especificada,
▪ Exemplo: centrada na vertical e
JLabel lblAguia = new JLabel( new ImageIcon("aguia.jpg"), JLabel.LEFT); com alinhamento
horizontal especificado.
public JLabel( String text, Icon icon, int horizontalAlignment ) Cria objeto JLabel com
texto, imagem e
alinhamento horizontal
especificados, centrados
na vertical.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 186/383


Classe JLabel Métodos 1/2
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios (1/2)

Declaração Funcionalidade
public void setText(String text) Especifica texto.
▪ Ex: JLabel lblAguia = new JLabel();
lbl.setText("Águia");
public String getText() Retorna texto.
▪ Ex: String texto = lbl.getText();
public void setIcon( Icon defaultIcon ) Especifica imagem.
▪ Ex: lbl.setIcon(new ImageIcon("aguia.jpg") );
public void setIconTextGap(int iconTextGap) Especifica intervalo entre texto e imagem.
▪ Ex: lbl.setIconTextGap( 10 );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 187/383


Classe JLabel Métodos 2/2
▪ Próprios (2/2)

Declaração Funcionalidade
public void setVerticalAlignment( int alignment ) Especifica alinhamento vertical do
texto e imagem;
▪ Exemplo 1:
Opções de alinhamento:
JLabel lblAguia = new JLabel("Águia"); ▪ SwingConstants.CENTER
lblAguia.setVerticalAlignment( SwingConstants.TOP); ▪ SwingConstants.TOP
▪ SwingConstants.BOTTOM
▪ Exemplo 2:
▪ JLabel.CENTER
JLabel lblAguia = new JLabel("Águia");
▪ JLabel.TOP
lblAguia.setVerticalAlignment( JLabel.TOP ); ▪ JLabel.BOTTOM
public void setHorizontalAlignment( int alignment ) Especifica alinhamento horizontal
do texto e imagem;
▪ Exemplo 1:
Opções de alinhamento:
JLabel lblAguia = new JLabel("Águia"); ▪ SwingConstants.CENTER
lblAguia.setHorizontalAlignment( SwingConstants.LEFT ); ▪ SwingConstants.RIGHT
▪ SwingConstants.LEFT
▪ Exemplo 2:
▪ JLabel.CENTER
JLabel lblAguia = new JLabel("Águia");
▪ JLabel.RIGHT
lblAguia.setHorizontalAlignment( JLabel.LEFT ); ▪ JLabel.LEFT

Nelson Freire (ISEP–DEI-PPROG 2016/17) 188/383


Classe JLabel Exemplo

▪ Código Incompleto

public class ContadorGUI extends JFrame {


private JLabel lblNumero;
private static String s = "Número de Cliques: ";
private static final int JANELA_LARGURA = 270;
private static final int JANELA_ALTURA = 150;
public ContadorGUI() {
super("Contador de Cliques");
lblNumero = new JLabel(s + "0");
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}

▪ Código mais Completo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 189/383


Classe JLabel Eventos 1/2

Tipos de Evento que label pode Gerar Evento


Componente adicionado à label
Container
Componente removido da label
Label escondida
Label mostrada
Component
Label movida
Label redimensionada
Label adquire o foco de entrada
Focus
Label perde o foco de entrada
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou na label
Rato saiu da label
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida

Nelson Freire (ISEP–DEI-PPROG 2016/17) 190/383


Classe JLabel Eventos 2/2
▪ Evento Mouse
▪ Iniciado por
▪ Clique no rato // exemplo: duplo-clique
▪ Rato movido
▪ Rato entrou/saiu da label
▪ Rato com botão premido / libertado
▪ Rato arrastado
▪ Roda do rato movida
▪ Tratamento
▪ Realizado por objetos de classes que:
▪ Implementem o interface MouseListener // para implementar todos os métodos
▪ Derivadas da classe MouseAdapter // para implementar alguns métodos
▪ Exemplo
Declaração Funcionalidade
public synchronized void addMouseListener( ActionListener l ) Regista objeto para
tratar evento do tipo
▪ Exemplo: Mouse.
JLabel lbl = new JLabel("Águia");
// Classe TrataEvento implementa interface MouseListener
TrataEvento t = new TrataEvento();
lbl.addMouseListener( t );
Nelson Freire (ISEP–DEI-PPROG 2016/17) 191/383
Classe JLabel Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/label.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 192/383


Componentes
Informação Sumário
▪ Apresentação de Informação
▪ Classe JLabel
▪ Classe JSeparator
▪ Classe JTable

Nelson Freire (ISEP–DEI-PPROG 2016/17) 193/383


Classe JSeparator Interesse
▪ Separar Componentes Gráficos
▪ Qualquer parte do GUI
▪ Separador = Linha

▪ Exemplos
▪ Menus
▪ Separador de grupos lógicos de itens de menus // separador horizontal

▪ Barra de Ferramentas
▪ Separador de Ferramentas // separador vertical

Nelson Freire (ISEP–DEI-PPROG 2016/17) 194/383


Classe JSeparator Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JSeparator extends JComponent
implements SwingConstants, Accessible { ... }

Object

Component

Container

JComponent

JSeparator

Nelson Freire (ISEP–DEI-PPROG 2016/17) 195/383


Classe JSeparator Construtores
Declaração Funcionalidade
public JSeparator() Cria separador horizontal.
▪ Exemplo:
JSeparator sp1 = new JSeparator ();

public JSeparator( int orientation ) Cria separador horizontal


ou vertical.
▪ Exemplos:
JSeparator sp1 = new JSeparator (JSeparator.VERTICAL);
Ex: JSeparator sp2 = new JSeparator (JSeparator.HORIZONTAL);

Nelson Freire (ISEP–DEI-PPROG 2016/17) 196/383


Classe JSeparator Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprio
▪ Mais usado

Declaração Funcionalidade
public void setOrientation( int orientation ) Especifica orientação.
▪ Exemplo
JSeparator sp1 = new JSeparator ();
sp1.setOrientation( JSeparator.VERTICAL );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 197/383


Classe JSeparator Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/separator.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 198/383


Componentes
Informação Sumário
▪ Apresentação de Informação
▪ Classe JLabel
▪ Classe JSeparator
▪ Classe JTable

Nelson Freire (ISEP–DEI-PPROG 2016/17) 199/383


Tabela Introdução
▪ Interesse
▪ Mostrar grupo de dados (objetos) organizados em linhas e colunas

▪ Constituída
▪ Células // cada célula – mostra um elemento dos dados.
▪ Colunas // cada coluna – mostra um tipo de dados (ex: “string”, inteiro, “checkbox”, …).
▪ Cabeçalho // contém nomes de colunas.

Cabeçalho

Célula Coluna

▪ Opcionalmente
▪ Dados
▪ Podem ser editados … pelo utilizador.
▪ Tabela Mostrada
▪ Dentro de um “Scroll Pane” // “Scroll Pane” serve de contentor de JTable
Nelson Freire (ISEP–DEI-PPROG 2016/17) 200/383
Tabela Arquitetura 1/2
▪ MVC (Model-View-Controller)
▪ Padrão de arquitetura de software
▪ Tabela constituída por 3 componentes:

View ▪ Responsável pela Vista da Tabela (lógica da UI)


▪ Implementada por objeto JTable
Tabela
=
Controller ▪ Responsável pela comunicação entre View e Model objeto JTable
▪ Transparente para o programador +
objeto TableModel

Model ▪ Responsável pelo Modelo da Tabela (lógica do negócio)


▪ Implementado por objeto TableModel

▪ Interesse
▪ Separar
▪ Vista da Tabela // implementada … por objeto JTable
▪ Dados da Tabela // armazenados … numa coleção de objetos (ex: ArrayList, HashMap, ...)
▪ Objetivo
▪ Permitir alterar a Estrutura dos Dados (coleção de objetos) …
… sem implicar a modificação da Vista da Tabela.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 201/383


Tabela Arquitetura 2/2
▪ Exemplo

Objeto Objeto Coleção de


JTable TableModel Objetos

TableModel
é uma
interface

Nelson Freire (ISEP–DEI-PPROG 2016/17) 202/383


Tabela Classe JTable 1/5
▪ Package
▪ javax.swing

▪ Declaração
public class JTable extends JComponent
implements TableModelListener, Scrollable, TableColumnModelListener,
ListSelectionListener, CellEditorListener, Accessible,
RowSorterListener { ... }

Object

Component

Container

JComponent

JTable

Nelson Freire (ISEP–DEI-PPROG 2016/17) 203/383


Tabela Classe JTable 2/5
▪ Construtor
▪ Para usar modelos de dados
Declaração Funcionalidade
public JTable(TableModel dm) Cria um objeto
JTable inicializado
▪ Exemplo: com o modelo de
DefaultTableModel modelo = new DefaultTableModel(); dados dm.
JTable table = new JTable( modelo );
JScrollPane scrPane = new JScrollPane(table); // contentor da tabela

Nelson Freire (ISEP–DEI-PPROG 2016/17) 204/383


Tabela Classe JTable 3/5
▪ Métodos (mais usados) (1/3)
Declaração Funcionalidade
public TableModel getModel() Retorna o modelo de dados
que fornece os dados
▪ Exemplo: visualizados por este objeto
DefaultTableModel modelo = new DefaultTableModel(); JTable.
JTable table = new JTable( modelo );
JScrollPane scrPane = new JScrollPane(table);

TableModel modelo = table.getModel(); // TableModel é interface

DefaultTableModel modelo = (DefaultTableModel) table.getModel();
public void setFillsViewportHeight(boolean fillsViewportHeight) ▪ Especifica a propriedade
setFillsViewportHeight
▪ Exemplo:
▪ True significa que a
DefaultTableModel modelo = new DefaultTableModel(); tabela usa toda a altura
JTable table = new JTable( modelo ); do seu contentor,
table. setFillsViewportHeight(true); mesmo que não tenha
um nº de linhas
JScrollPane scrPane = new JScrollPane(table);
suficiente para usar todo
… o espaço vertical do
contentor.
Nelson Freire (ISEP–DEI-PPROG 2016/17) 205/383
Tabela Classe JTable 4/5
▪ Métodos (mais usados) (2/3)
Declaração Funcionalidade
public void setSelectionMode(int selectionMode) Especifica o modo de seleção da
tabela (linhas e colunas) para
▪ Exemplo: permitir:
DefaultTableModel modelo = new DefaultTableModel(); ▪ Seleção simples
JTable table = new JTable( modelo ); ▪ Seleção de um intervalo
simples
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
▪ Seleção de múltiplos
JScrollPane scrPane = new JScrollPane(table); intervalos
… Parâmetros:
▪ ListSelectionModel.SINGLE_SELE
CTION
▪ ListSelectionModel.SINGLE_INTE
RVAL_SELECTION
▪ ListSelectionModel.MULTIPLE_IN
TERVAL_SELECTION
public void clearSelection() Desseleciona todas as linhas e colunas
selecionadas.
▪ Exemplo:

JTable table = new JTable( modelo );

table.clearSelection();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 206/383


Tabela Classe JTable 5/5
▪ Métodos (mais usados) (3/3)
Declaração Funcionalidade
public void setAutoCreateRowSorter(boolean autoCreateRowSorter) Especifica se a tabela pode
criar automaticamente um
▪ Exemplo: objeto TableRowSorter
DefaultTableModel modelo = new DefaultTableModel(); sempre que o modelo se
JTable table = new JTable( modelo ); modificar.
… Esta funcionalidade permite
table.setAutoCreateRowSorter(true); // ativa ordenação das linhas a ordenação das linhas da
tabela, através de um clique
sobre o cabeçalho de uma
coluna da tabela.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 207/383


Tabela Modelos de Dados 1/5
▪ Interface TableModel (1/2)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 208/383


Tabela Modelos de Dados 2/5
▪ Interface TableModel (2/2)
Declaração Funcionalidade
public int getRowCount(); Retorna o número de linhas do modelo de dados.
Usado por objeto JTable para determinar o nº de linhas a mostrar.
Chamado frequentemente, portanto deve ser um método rápido.
ublic int getColumnCount(); Retorna o nº de colunas do modelo de dados.
Usado por objeto JTable para determinar o nº de colunas a criar e
mostrar por omissão.
public String getColumnName(int columnIndex); Retorna o nome da coluna com o índice columnIndex.
Usado por objeto JTable para inicializar o cabeçalho da coluna da tabela.
Duas colunas podem ter o mesmo nome.
public Class<?> getColumnClass(int columnIndex); Retorna a superclasse mais especifica de todas as células na coluna.
Usado por objeto JTable para providenciar um renderer por omissão e
um editor por omissão para a coluna.
public boolean isCellEditable(int rowIndex, int columnIndex); Retorna true se a célula especificada for editável. Senão, setValueAt
sobre a célula não irá modificar o valor dessa célula.
public Object getValueAt(int rowIndex, int columnIndex); Retorna o valor da célula especificada.

public void setValueAt(Object aValue, int rowIndex, int Especifica o valor da célula especificada como aValue.
columnIndex);
public void addTableModelListener(TableModelListener l); Adiciona um listener à lista que é notificada sempre que ocorre uma
modificação do modelo de dados.
public void removeTableModelListener(TableModelListener l); Remove um listener da lista que é notificada sempre que ocorre uma
modificação do modelo de dados.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 209/383


Tabela Modelos de Dados 3/5
▪ Classe AbstractTableModel (1/3)
▪ Implementa a interface TableModel

▪ Métodos implementados:

Métodos não implementados


 Implementar em subclasses instanciáveis

Métodos próprios (adicionados, não herdados)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 210/383


Tabela Modelos de Dados 4/5
▪ Classe AbstractTableModel (2/3)
▪ Subclasse instanciável
▪ Obrigada a implementar apenas os seguintes métodos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 211/383


Tabela Modelos de Dados 5/5
▪ Classe AbstractTableModel (3/3)
▪ Métodos Fire
▪ Enviam um evento TableModelEvent … ao objeto JTable para atualizar Vista da Tabela.
▪ Interesse
▪ Notificar JTable sempre que ocorre uma alteração do modelo de dados.
▪ Classe Própria
▪ Deve disparar um evento apropriado … invocando um dos seguintes métodos:

Método Modificação de Dados

public void fireTableCellUpdated(int row, int column) Atualização da célula especificada.


public void fireTableRowsUpdated(int firstRow, int lastRow) Atualização das linhas especificadas.
Atualização de todos os dados da tabela
public void fireTableDataChanged()
(só dados).
public void fireTableRowsInserted(int firstRow, int lastRow) Inseridas as novas linhas especificadas.
public void fireTableRowsDeleted(int firstRow, int lastRow) Eliminadas as linhas especificadas.
Atualização da estrutura da tabela.
public void fireTableStructureChanged() Modificação do número de colunas,
nomes e tipo de dados das colunas.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 212/383


Tabela Eventos do Modelo da Tabela 7/8
▪ Modelo da Tabela
▪ Gera eventos Objeto
TableModelListener
▪ Quando os dados/estrutura da tabela
são modificados Objeto Objeto
▪ Eventos TableModel TableModelListener

▪ Tipo TableModelEvent Evento


▪ Eventos enviados a objetos trata evento TableModel Objeto
▪ Tipo TableModelListener TableModelListener
▪ Registados no modelo da tabela
▪ Tipo TableModelListener
▪ Definido por interface
▪ Declaração
public interface TableModelListener extends java.util.EventListener{
public void tableChanged(TableModelEvent e); // método de evento
}

▪ Objeto Trata Evento TableModel


▪ Instância de classe que implementa a interface TableModelListener
▪ Implementa o método tableChanged

Nelson Freire (ISEP–DEI-PPROG 2016/17) 213/383


Tabela Eventos do Modelo da Tabela 8/8
▪ Método tableChanged

public interface TableModelListener extends java.util.EventListener {


public void tableChanged(TableModelEvent e); // método de evento
}

▪ Parâmetro “TableModelEvent e” permite conhecer:

▪ Tipo de modificação
▪ Inserção, Eliminação ou Atualização
▪ public int getType()
▪ Retorna: TableModelEvent.INSERT, .DELETE ou .UPDATE
▪ Células da tabela modificadas
▪ Linhas
▪ public int getFirstRow()
▪ Retorno TableModelEvent.HEADER_ROW
▪ Modificação de nomes, tipos e ordem das colunas
▪ public int getLastRow()
▪ Colunas
▪ public int getColumn()
▪ Retorno TableModelEvent.ALLCOLUMNS
▪ Modificadas todas as colunas das linhas indicadas
Nelson Freire (ISEP–DEI-PPROG 2016/17) 214/383
Tabela Modelos de Dados 1/6
▪ Objetos de Classe
▪ Nativa // fornecida pelo Java
▪ Própria // criada pelo programador

▪ Classe Nativa
▪ DefaultTableModel
▪ Usada por omissão pela JTable
▪ Guarda dados num objeto da classe Vector
▪ Fácil de usar mas tem restrições
▪ Exemplos:
▪ Células apenas editáveis
▪ Dados tratados todos como Strings
▪ Ex: Boolean não visualizado numa “check box”
▪ Obriga colocação de todos os dados da tabela num array ou Vector
▪ Pode ser desadequado para algum dado
▪ Alternativa
▪ Criar classe própria
▪ Classe Própria
▪ Permite implementar os nossos modelos da tabela
▪ Herdada da classe AbstractTableModel
▪ Classe Abstrata
▪ Implementa a interface TableModel

Nelson Freire (ISEP–DEI-PPROG 2016/17) 215/383


Tabela Bibliografia
▪ Internet
▪ https://docs.oracle.com/javase/tutorial/uiswing/components/table.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 216/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 217/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 218/383


Hierarquia
de Classes Hierarquia de Classes de Controlos Básicos
Object

SWING AWT
Component

Container
is-a
JComponent Window

Frame Dialog
JComboBox
JFrame JDialog
JList
JOptionPane
JTable
JFileChooser

JSeparator JMenuBar AbstractButton JLabel JPanel JTextComponent JScrollPane

JMenuItem JToggleButton JButton JTextArea JTextField

JMenu JRadioButton JCheckBox JPasswordField JFormattedTextField

Legenda: Classe Abstrata Classe Instanciável Exercícios PPROG – Controlos Básicos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 219/383


Superclasses Classe AbstractButton 1/4
▪ Package
▪ javax.swing

▪ Declaração
public abstract class AbstractButton extends JComponent
implements ItemSelectable, SwingConstants { ... }

Object

Component

Container

JComponent

AbstractButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 220/383


Superclasses Classe AbstractButton 2/4
▪ Métodos Próprios (1/3)

Declaração Funcionalidade
public void setMnemonic(char mnemonic) Especifica tecla de atalho
▪ Exemplo:
btnCancelar.setMnemonic(KeyEvent.VK_C) ; // ALT + c
public void setDisplayedMnemonicIndex(int index) Especifica tecla de atalho
▪ Exemplo:
btnCancelar.setDisplayedMnemonicIndex (0) ; // ALT + c
public void setVerticalAlignment( int alignment ) Especifica alinhamento vertical do texto e
ícone;
Opções de alinhamento:
▪ SwingConstants.CENTER (por omissão)
▪ SwingConstants.TOP
▪ SwingConstants.BOTTOM

public void setHorizontalAlignment( int alignment ) Especifica alinhamento horizontal do texto


e ícone;
▪ Exemplos:
Opções de alinhamento:
▪ SwingConstants.CENTER (por omissão)
▪ SwingConstants.RIGHT
▪ SwingConstants.LEFT
JButton JMenu JMenuItem JCheckBox JRadioButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 221/383


Superclasses Classe AbstractButton 3/4
▪ Métodos Próprios (2/3)

Declaração Funcionalidade
public void setVerticalTextPosition( int textPosition ) Especifica a posição vertical do texto
relativamente ao ícone;
▪ Exemplos:
Opções:
▪ SwingConstants.CENTER (por omissão)
▪ SwingConstants.TOP
▪ SwingConstants.BOTTOM

public void setHorizontalTextPosition( int textPosition ) Especifica a posição horizontal do texto


relativamente ao ícone;
▪ Exemplos:
Opções:
▪ SwingConstants.RIGHT (por omissão)
▪ SwingConstants.LEFT
▪ SwingConstants.CENTER

public void setText( String text ) Especifica texto: simples ou formatado


por HTML.
public String getText() Retorna o texto.

JButton JMenu JMenuItem JCheckBox JRadioButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 222/383


Superclasses Classe AbstractButton 4/4
▪ Métodos Próprios (3/3)

Declaração Funcionalidade
public void setIcon( Icon defaultIcon ) Especifica o ícone.

public void setDisabledIcon( Icon disabledIcon ) Especifica ícone para botão inibido.
▪ Exemplo:
btn.setDisabledIcon ( new ImageIcon("c:\\x.gif") );
public void setRolloverIcon( Icon rolloverIcon ) Especifica novo ícone à passagem do apontador
do rato.
▪ Exemplo:
btn.setRolloverIcon( new ImageIcon("c:\\tips.gif") );

public void setIconTextGap( int iconTextGap ) Especifica intervalo entre texto e ícone.
▪ Exemplo:

JButton JMenu JMenuItem JCheckBox JRadioButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 223/383


Superclasses Classe JToggleButton 1/4
▪ Package
▪ javax.swing

▪ Declaração
public abstract class JToggleButton extends AbstractButton
implements Accessible { ... }

Object

Component

Container

JComponent

AbstractButton

JToggleButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 224/383


Superclasses Classe JToggleButton 2/4
▪ Interesse
▪ Implementação de botões de dois estados
▪ Selecionado

▪ Desselecionado

▪ Herdada pelas classes


▪ JCheckBox
▪ JRadioButton

JCheckBox JRadioButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 225/383


Superclasses Classe JToggleButton 3/4
▪ Construtores

Declaração Funcionalidade
public JToggleButton() Cria botão visível e
▪ Exemplo: vazio.
JToggleButton tbt1 = new JToggleButton();
public JToggleButton( String text ) Cria botão visível
▪ Exemplo: com texto.
JToggleButton tbtCancelar = new JToggleButton("Cancelar");
public JToggleButton( Icon icon ) Cria botão visível
▪ Exemplo: com ícone.
JToggleButton tbtCancelar = new JToggleButton( new ImageIcon("x.gif"));
public JButton( String text, Icon icon ) Cria botão visível
▪ Exemplo: com ícone e texto.
Icon icon = new ImageIcon("x.gif");
JToggleButton tbtCancelar = new JToggleButton("Cancelar", icon );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 226/383


Superclasses Classe JToggleButton 4/4
▪ Bibliografia
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/button.html

JCheckBox JRadioButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 227/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 228/383


Botão de
Comando Interesse
▪ Permitir ao Utilizador
▪ Ordenar execução de comando (i.e.,ação)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 229/383


Botão de
Comando Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JButton extends AbstractButton
implements Accessible { ... }

Object

Component

Container

JComponent

AbstractButton

JButton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 230/383


Botão de
Comando Classe JButton
▪ Construtores

Declaração Funcionalidade
public JButton() Cria objeto
▪ Exemplo: JButton visível
vazio.
JButton btnCancelar = new JButton();
public JButton( String text ) Cria objeto
▪ Exemplo: JButton visível
com texto.
JButton btnCancelar = new JButton("Cancelar");
public JButton( Icon icon ) Cria objeto
▪ Exemplo: JButton visível
com ícone.
JButton btnCancelar = new JButton(new ImageIcon("x.gif"));
public JButton( String text, Icon icon ) Cria objeto
▪ Exemplo: JButton visível
com ícone e texto.
JButton btnCancelar = new JButton("Cancelar", new ImageIcon("x.gif"));

▪ Por omissão
▪ Botão é visível
Nelson Freire (ISEP–DEI-PPROG 2016/17) 231/383
Botão de
Comando Classe JButton
▪ Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent
▪ AbstractButton

▪ Próprios

Declaração Funcionalidade
public void setText(String text) Especifica o texto (simples ou HTML).
public String getText() Retorna o texto.
public void setIcon( Icon defaultIcon ) Especifica o ícone.
public void setIconTextGap(int iconTextGap) Especifica o intervalo entre texto e ícone.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 232/383


Botão de
Comando Classe JButton
▪ Exemplo ▪ Código Incompleto
public class ContadorGUI extends JFrame {
private JLabel lblNumero;
private JButton btnIncrementar, btnReiniciar;
private static String s = "Número de Cliques: ";
private static final int JANELA_LARGURA = 270;
private static final int JANELA_ALTURA = 150;

public ContadorGUI() {
super("Contador de Cliques");
criarComponentes();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}

private void criarComponentes(){


lblNumero = new JLabel(s + "0");
btnIncrementar = new JButton("Incrementar");
btnReiniciar = new JButton("Reiniciar");
}
}

▪ Código Completo
Nelson Freire (ISEP–DEI-PPROG 2016/17) 233/383
Botão de
Comando Eventos 1/2

Tipos de Evento que Botão pode Gerar Evento


Action Clique no botão
Componente adicionado ao botão
Container
Componente removido do botão
Botão escondido
Botão mostrado
Component
Botão movido
Botão redimensionado
Botão adquire o foco
Focus
Botão perde o foco
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou no botão
Rato saiu do botão
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida

Nelson Freire (ISEP–DEI-PPROG 2016/17) 234/383


Botão de
Comando Eventos 2/2
▪ Evento Action
▪ Iniciado
▪ Clique no botão de comando
▪ Tratamento
▪ Realizado
▪ Por objetos de classes que implementem o interface ActionListener
▪ Exemplo

Declaração Funcionalidade
public void addActionListener( ActionListener l ) Regista objeto para tratar
evento do tipo Action.
▪ Exemplo:
JButton btn = new JButton("Cancelar");
// Classe TrataEvento implementa interface ActionListener
TrataEvento t = new TrataEvento();
btn.addActionListener( t );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 235/383


Botão de
Comando Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/button.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 236/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 237/383


Entrada de Texto Componentes de Entrada de Texto
▪ Permitem ao utilizador da aplicação
▪ Introdução de texto
▪ Edição de texto

▪ Tipos de Componentes Swing Object


▪ JTextField
▪ Aceita uma só linha de texto Component

▪ JTextArea
Container
▪ Pode aceitar múltiplas linhas de texto
▪ JPasswordField
JComponent Window
▪ Aceita só uma linha de texto
▪ Esconde texto introduzido
JTextComponent Frame
▪ JFormattedTextField
▪ Para entradas específicas
JTextArea JTextField JFrame
▪ Exemplos
▪ Datas e Endereços IP
JPasswordField JFormattedTextField
▪ Herdam Classe JTextComponent
▪ Classe abstrata
▪ Não instanciável

Nelson Freire (ISEP–DEI-PPROG 2016/17) 238/383


JTextComponent Interesse
▪ Classe base de componentes swing de texto
▪ Caraterísticas comuns

Object

Component

Container

JComponent Window

JTextComponent Frame

JTextArea JTextField JFrame

JPasswordField JFormattedTextField

Nelson Freire (ISEP–DEI-PPROG 2016/17) 239/383


JTextComponent Declaração
▪ Package
▪ javax.swing.text

▪ Declaração
public abstract class JTextComponent extends JComponent
implements Scrollable, Accessible { ... }

▪ Classe Abstrata
▪ Não Instanciável

Object

Component

Container

JComponent

JTextComponent

Nelson Freire (ISEP–DEI-PPROG 2016/17) 240/383


JTextComponent Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios
▪ Mais usados

Declaração Funcionalidade
public void setText( String t ) Especifica texto t para o componente;
setText(null) ou setText("") elimina texto do componente.
public String getText( ) Retorna texto contido no componente.
public void setEditable(boolean b) Especifica se o texto pode ou não ser editado.

JTextField

Nelson Freire (ISEP–DEI-PPROG 2016/17) 241/383


JTextField Interesse
▪ Entrada de Texto Simples
▪ Linha de texto

▪ Exemplo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 242/383


JTextField Declaração
▪ Package
▪ javax.swing

▪ Declaração
public class JTextField extends JTextComponent
implements SwingConstants { ... }

Object

Component

Container

JComponent

JTextComponent

JTextField

Nelson Freire (ISEP–DEI-PPROG 2016/17) 243/383


JTextField Construtores
Declaração Funcionalidade
public JTextField( ) Cria campo de texto vazio e com nº de colunas 0
(tamanho nulo).
▪ Exemplo:
JTextField txtNome = new JTextField();
public JTextField( String text ) Cria campo de texto inicializado com o texto
especificado.
public JTextField( int columns ) Cria campo de texto vazio e com nº de colunas
especificado (tamanho).
public JTextField( String text , int columns ) Cria campo de texto inicializado com texto e nº
de colunas especificados.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 244/383


JTextField Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent
▪ JTextComponent

▪ Próprios
▪ Mais usados

Declaração Funcionalidade
public void setFont( Font f ) Especifica tipo, estilo e tamanho das letras.
public void setHorizontalAlignment( int alignment ) Especifica alinhamento horizontal do texto;
Opções:
▪ JTextField.LEFT ou JTextField.LEADING
▪ JTextField.CENTER
▪ JTextField.RIGHT ou JTextField.TRAILING

Nelson Freire (ISEP–DEI-PPROG 2016/17) 245/383


JTextField Eventos 1/2
Tipos de Evento que Campo de Texto pode Gerar Evento
Action Terminada edição (tecla ENTER premida)
Componente adicionado ao campo de texto
Container
Componente removido do campo de texto
Campo de texto escondido
Campo de texto mostrado
Component
Campo de texto movido
Campo de texto redimensionado
Campo de texto adquire o foco de entrada
Focus
Campo de texto perde o foco de entrada
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou no campo de texto
Rato saiu do campo de texto
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida
Text Texto alterado
Nelson Freire (ISEP–DEI-PPROG 2016/17) 246/383
JTextField Eventos 2/2
▪ Evento Action
▪ Iniciado premindo tecla ENTER dentro do campo de texto
▪ Tratamento
▪ Realizado
▪ Por objetos de classes que implementem o interface ActionListener
▪ Exemplo

Declaração Funcionalidade
public void addActionListener( ActionListener l ) Regista objeto para
tratar evento do tipo
▪ Exemplo: Action.
JTextField txt = new JTextField( 10 );
// Classe TrataEvento implementa interface ActionListener
TrataEvento t = new TrataEvento();
txt.addActionListener( t );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 247/383


JTextField Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 248/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 249/383


Menu Interesse
▪ Sistema de Menus
▪ Permitir ao utilizador escolher
▪ Uma de várias opções
▪ Salvar espaço do GUI
▪ Só ocupa espaço … da Barra de Menus

Barra de Menus

Sistema de Menus

Nelson Freire (ISEP–DEI-PPROG 2016/17) 250/383


Menu Constituição de Sistema de Menus
▪ Sistema de Menus
▪ Estrutura Hierárquica
▪ Menus organizados
▪ Vários níveis

▪ Constituído
▪ Barra de Menus
▪ Contém Menus Barra de Menus
▪ Contêm Menu
▪ Itens de Menu Item de Menu
▪ Separadores Separador de Itens
▪ Submenus

Componentes de um Sistema de Menus

Nelson Freire (ISEP–DEI-PPROG 2016/17) 251/383


Menu Barra de Menus
▪ Colocada
▪ Topo da janela
▪ Acima do Content Pane

▪ Constituída
▪ Menus de nível superior

▪ Clique no nome de menu


▪ Abre menu
▪ Torna visível Colocação da Barra de Menus

Barra de Menus

Abertura de um Menu

Nelson Freire (ISEP–DEI-PPROG 2016/17) 252/383


Menu Componentes para Sistema de Menus
▪ Classes de Componentes
▪ JMenuBar // Barra de Menus
▪ JMenu // Menus e Submenus
▪ JMenuItem // Itens de Menus
▪ JSeparator // Separador de itens de menu // ou método addSeparator() de JMenu

▪ Hierarquia
Object

Component

Container

JComponent

JSeparator JMenuBar AbstractButton

JMenuItem JToggleButton JButton

JMenu JRadioButton JCheckBox

Nelson Freire (ISEP–DEI-PPROG 2016/17) 253/383


Menu Classe JMenuItem 1/2
▪ Package
▪ javax.swing

▪ Declaração
public class JMenuItem extends AbstractButton
implements Accessible, MenuElement { ... }

▪ Construtores
Declaração Funcionalidade
public JMenuItem( String text ) Constrói item de menu
▪ Ex: JMenuItem mitAcerca = new JMenuItem("Acerca"); com texto especificado.

public JMenuItem( String text, int mnemonic ) Constrói item de menu


▪ Ex: JMenuItem mitAcerca = new JMenuItem("Acerca", 'A'); com texto e mnemónica do
teclado especificados.
public JMenuItem(String text, Icon icon ) Constrói item de menu
▪ Ex: Icon ic1 = new ImageIcon("acerca.jpg"); com texto e ícone
especificados.
JMenuItem mitAcerca = new JMenuItem("Acerca", ic1);
public JMenuItem( ) Constrói item de menu
▪ Ex: JMenuItem mitSair = new JMenuItem(); sem texto e sem ícone.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 254/383


Menu Classe JMenuItem 2/2
▪ Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent
▪ AbstractButton
▪ Próprios (mais usados)

Declaração Funcionalidade
public void setAccelerator(KeyStroke keyStroke) Especifica o acelerador
do item de menu;
▪ Exemplos:
JMenuItem mitAcerca = new JMenuItem("Acerca", 'A'); Acelerador é uma tecla
ou combinação de teclas
mitAcerca.setAccelerator( KeyStroke.getKeyStroke("ctrl A") ); que aciona o item de
… menu sem necessidade
mitAcerca.setAccelerator( KeyStroke.getKeyStroke("alt A") ); de navegar pelo sistema
… de menus.
mitAcerca.setAccelerator( KeyStroke.getKeyStroke('A') );
public void setEnabled(boolean b) Inibe/desinibe item de
▪ Ex: mitAcerca.setEnable(false); menu.
JMenu

Nelson Freire (ISEP–DEI-PPROG 2016/17) 255/383


Menu Classe JMenu 1/2
▪ Package
▪ javax.swing

▪ Declaração
public class JMenu extends JMenuItem
implements Accessible, MenuElement { ... }

▪ Construtores
Declaração Funcionalidade
public JMenu( String text ) Constrói menu com texto
especificado
▪ Exemplo:
JMenu mnuAjuda = new JMenu("Ajuda");

public JMenu( ) Constrói menu sem texto


▪ Exemplo:
JMenu mitSair = new JMenu();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 256/383


Menu Classe JMenu 2/2
▪ Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent
▪ AbstractButton
▪ JMenuItem
▪ Próprios
▪ Mais usados Declaração Funcionalidade
public JMenuItem add( JMenuItem menuItem ) Adiciona item de menu no fim do
menu;
▪ Exemplo:
JMenuItem mitAcerca = new JMenuItem("Acerca"); Retorna o item adicionado.
JMenu mnuAjuda = new JMenu("Ajuda");
mnuAjuda.add( mitAcerca );

public void addSeparator() Adiciona separador no fim do


menu.
▪ Exemplo:
mnuAjuda.addSeparator();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 257/383


Menu Classe JMenuBar 1/2
▪ Package
▪ javax.swing

▪ Declaração
public class JMenuBar extends JComponent
implements Accessible, MenuElement { ... }

▪ Construtor

Declaração Funcionalidade
public JMenuBar( ) Constrói barra de menus.
▪ Exemplo:
JMenuBar mb = new JMenuBar();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 258/383


Menu Classe JMenuBar 2/2
▪ Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprio
▪ Mais usado

Declaração Funcionalidade
public JMenu add(JMenu c) Insere menu especificado no fim da barra
de menus.
▪ Exemplo
JMenuBar mb = new JMenuBar();
JMenu mnuAjuda = new JMenu("Ajuda");
mb.add( mnuAjuda );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 259/383


Menu Sistema de Menus
▪ Exemplo de Implementação (1/3)

Criado item Abrir e adicionado


ao Menu Projetos, abaixo
Separador de itens

Criado submenu Grupos e


adicionado no fim do Menu
Projetos  Submenu

Nelson Freire (ISEP–DEI-PPROG 2016/17) 260/383


Menu Sistema de Menus
▪ Exemplo de Implementação (2/3)

Método de
Evento Action
do item Abrir

Método de
Evento Action
do item Fechar

Nelson Freire (ISEP–DEI-PPROG 2016/17) 261/383


Menu Sistema de Menus
▪ Exemplo de Implementação (3/3)

Submenu:
Menu adicionado
a outro menu

Item de Submenu

Nelson Freire (ISEP–DEI-PPROG 2016/17) 262/383


Menu Acesso aos Menus pelo Teclado 1/5
▪ Menus suportam Acesso pelo Teclado
▪ Aumenta acessibilidade das aplicações

▪ Tipos de Acesso pelo Teclado


▪ Mnemónicas
▪ Aceleradores

Nelson Freire (ISEP–DEI-PPROG 2016/17) 263/383


Menu Acesso aos Menus pelo Teclado 2/5
▪ Mnemónicas
▪ Teclas
▪ Permitem navegar pela hierarquia de menus
▪ Identificadas
▪ Por carater sublinhado no nome
▪ Menu
▪ Item de menu Acelerador
de Item
▪ Usadas
▪ Simultaneamente com tecla ALT
Mnemónica o
▪ ALT + Mnemónica
▪ Exemplos (figura)
▪ ALT + A // abre menu
▪ ALT + s // abre submenu Mnemónicas e Aceleradores

▪ Itens de menu
▪ Têm de estar visíveis

Nelson Freire (ISEP–DEI-PPROG 2016/17) 264/383


Menu Acesso aos Menus pelo Teclado 3/5
▪ Aceleradores
▪ Teclas de atalho
▪ Para itens de menu
▪ Menus podem estar fechados
▪ Acesso + rápido
▪ Evitam navegação pela hierarquia de menus
▪ Tipos
▪ Tecla simples
▪ Exemplo: x Acelerador
▪ Combinação de teclas de Item
▪ Exemplos
▪ Alt+1 // figura Mnemónica o
▪ CTRL+X

Mnemónicas e Aceleradores

Nelson Freire (ISEP–DEI-PPROG 2016/17) 265/383


Menu Acesso aos Menus pelo Teclado 4/5
▪ Implementação de Mnemónica
▪ Tem de ser carater do nome de Menu, Item ou Submenu
▪ Formas
▪ JMenu
public void setMnemonic( char mnemonic ) // sublinha 1º carater
public void setDisplayedMnemonicIndex(int index) // índice a partir de 0
▪ Exemplo
JMenu menuEditar = new JMenu("Editar");
menuEditar.setMnemonic('E'); // pelicas = char; ALT+E
menuEditar. setDisplayedMnemonicIndex(0); // ALT + E
▪ JMenuItem
▪ Métodos semelhantes aos anteriores e um construtor:
public JMenuItem(String text, int mnemonic) // construtor
▪ Exemplo Item de Menu
JMenuItem menuItem = new JMenuItem("Cut", 'C' ); // C ou ALT+C
ou
JMenuItem menuItem = new JMenuItem("Cut");
menuItem.setMnemonic('C');
Nelson Freire (ISEP–DEI-PPROG 2016/17) 266/383
Menu Acesso aos Menus pelo Teclado 5/5
▪ Implementação de Acelerador
▪ Usar método setAccelerator
public void setAccelerator( KeyStroke keyStroke )

▪ Exemplos
JMenuItem itemCortar = new JMenuItem("Cortar");
itemCortar.setAccelerator( KeyStroke.getKeyStroke("ctrl X") ); // combinação CTRL+X
itemCortar.setAccelerator( KeyStroke.getKeyStroke("alt X") ); // combinação ALT+X
itemCortar.setAccelerator( KeyStroke.getKeyStroke('x') ); // x

▪ Classe keystroke
▪ Cada instância representa uma tecla
▪ Método
static Keystroke getKeyStroke( int keyCode )
▪ Cria instância KeyStroke
▪ Encapsula tecla premida correspondente a evento KEY_PRESSED
▪ Keycode
▪ Representa código virtual duma tecla
Nelson Freire (ISEP–DEI-PPROG 2016/17) 267/383
Menu Eventos 1/2
Tipos de Evento que Menu/Item podem Gerar Evento
Action Clique em menu/item
Componente adicionado a menu/item
Container
Componente removido de menu/item
Menu/item escondido
Menu/item mostrado
Component
Menu/item movido
Menu/item redimensionado
Menu/item adquire o foco
Focus
Menu/item perde o foco
Item Selecionado/desselecionado item
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou no menu/item
Rato saiu do menu/item
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida
Nelson Freire (ISEP–DEI-PPROG 2016/17) 268/383
Menu Eventos 2/2
▪ Evento Action
▪ Iniciado por seleção de Menu ou Item de Menu através de
▪ Clique
▪ Teclado

▪ Tratamento
▪ Realizado
▪ Por objetos de classes que implementem o interface ActionListener
▪ Exemplo

JMenuItem itemSair = new JMenuItem("Sair");


itemSair.addActionListener(new ActionListener() { // classe (interna) anónima
public void actionPerformed( ActionEvent e ) {
System.exit(0); // ou dispose()
}
});

Nelson Freire (ISEP–DEI-PPROG 2016/17) 269/383


Menu Bibliografia

▪ http://download.oracle.com/javase/tutorial/uiswing/components/menu.html

▪ http://www.faqs.org/docs/javap/c7/s5.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 270/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 271/383


Caixa de Listagem Interesse
▪ Mostrar Lista de Elementos
▪ Para utilizador escolher
▪ Um elemento
▪ Múltiplos elementos
Um elemento Múltiplos elementos
selecionado selecionados
▪ Elementos de Lista
▪ Colocados numa simples caixa
▪ Organizados
▪ Numa coluna
Uma
▪ Múltiplas colunas Coluna
Múltiplas
Colunas
▪ Objetos arbitrários
▪ Exemplos
▪ Strings
▪ Caixas de verificação (JCheckBox) Lista de
Lista de Strings Caixas de Verificação

▪ Alternativa à Caixa de Combinação (JComboBox)


▪ Caixa de Listagem
▪ Mais complexa
▪ Tem mais capacidades
Combo Box

Nelson Freire (ISEP–DEI-PPROG 2016/17) 272/383


Caixa de Listagem Arquitetura
▪ MVC (Model-View-Controller)

▪ Responsável pela Vista da Lista (lógica da UI)


View
▪ Implementada por objeto JList
Vista da Lista

▪ Responsável pela comunicação entre View e Model


Controller
▪ Transparente para o programador

▪ Responsável pelo Modelo da Lista (lógica do negócio)


Model
▪ Implementado por objeto ListModel

▪ Interesse Implementação de Caixa de Listagem


=> Objeto JList + Objeto ListModel
▪ Separar: Modelo da Lista … da … Vista da Lista
▪ Modificação do Modelo da Lista não afete Vista da Lista.
▪ Vista da Lista (objeto JList)
▪ Sabe muito pouco sobre … forma como os dados estão armazenados
▪ Não fornece métodos para: inserir/remover elementos da lista
▪ Modelo da Lista (objeto ListModel)
▪ Gere elementos da lista
▪ Fornece métodos para: inserir/remover elementos da lista

Nelson Freire (ISEP–DEI-PPROG 2016/17) 273/383


Caixa de Listagem Classe JList 1/6
▪ Package
▪ javax.swing

▪ Declaração
public class JList<E> extends JComponent
implements Scrollable, Accessible { ... }

Object

Component

Container

JComponent

JList

▪ Tipo E
▪ Especifica tipo de elemento da caixa de listagem
Nelson Freire (ISEP–DEI-PPROG 2016/17) 274/383
Caixa de Listagem Classe JList 2/6
▪ Construtores
▪ Mais usados
Declaração Funcionalidade
public JList( ) Constrói uma caixa de listagem com um modelo de lista
▪ Ex: (AbstractListModel):
▪ Vazio
JList lstNomes = new JList(); ▪ Apenas pode ser lido
… ▪ Não é possível adicionar elementos ao
lstNomes.setModel( modelo ); modelo da lista.
Interesse:
▪ Especificar posteriormente o modelo de lista.
public JList(final E[] listData) Constrói uma caixa de listagem que mostra elementos
do array especificado.
Cria um modelo da lista contendo os elementos do
array e que apenas pode ser lido. Não é possível
adicionar/remover elementos do modelo da lista.
O modelo da lista referencia o array especificado.
Assim é possível alterar um elemento do modelo da
lista.
public JList(ListModel<E> dataModel) Constrói uma caixa de listagem que mostra os
elementos do modelo da lista especificado.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 275/383


Caixa de Listagem Classe JList 3/6
▪ Por omissão
▪ Mostra 8 elementos

▪ Elementos
▪ Podem ser seleccionados por cliques
▪ Seleção pode ser
▪ Múltipla // por omissão
▪ Simples // através do método setSelectionMode
// Ex: setSelectionMode( ListSelectionModel.SINGLE_SELECTION )

▪ Visualização de listas grandes


▪ Requer painel JScrollPane

Exemplo:

JList lstNomes = new JList (modelo);
JScrollPane scrPane = new JScrollPane( lstNomes );
add(scrPane, BorderLayout.CENTER);
JList + JScrollPane

Nelson Freire (ISEP–DEI-PPROG 2016/17) 276/383


Caixa de Listagem Classe JList 4/6
▪ Métodos Herdados
▪ Component
▪ Container
▪ JComponent

▪ Métodos Próprios (1/3)


▪ Mais usados

Declaração Funcionalidade
public void setSelectionMode(int selectionMode) Especifica modo de seleção de
elementos da lista
▪ Exemplo
▪ SINGLE_SELECTION
String  elementos = "Ana", "Maria", "João"; ▪ SINGLE_INTERVAL_SELECTION
JList<String> lst = new JList( elementos ); ▪ MULTIPLE_INTERVAL_SELECTION
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Nelson Freire (ISEP–DEI-PPROG 2016/17) 277/383


Caixa de Listagem Classe JList 5/6
▪ Métodos Próprios (2/3)

Declaração Funcionalidade
public int getSelectedIndex() Retorna índice do elemento selecionado /
menor índice no modo multi-seleção;
Retorna -1, sem elemento selecionado.
public int[] getSelectedIndices() Retorna array com os índices de todos os
elementos da lista selecionados, ordenados de
modo ascendente;
Retorna array vazio, sem qualquer elemento
selecionado.
public E getSelectedValue() Retorna elemento selecionado / com menor
índice no modo multi-seleção;
Retorna null, sem elemento selecionado.
public List<E> getSelectedValuesList() Retorna lista de elementos selecionados,
ordenados de modo ascendente dos seus
índices;
Retorna lista vazia, sem qualquer elemento
selecionado.
public void setVisibleRowCount(int visibleRowCount) Especifica o nº de elementos mostrados sem
recorrer ao scrolling.
Por omissão mostra 8 elementos.
Nelson Freire (ISEP–DEI-PPROG 2016/17) 278/383
Caixa de Listagem Classe JList 6/6
▪ Métodos Próprios (3/3)

Declaração Funcionalidade
public ListModel<E> getModel() Retorna o modelo da lista que guarda os
elementos da lista apresentados pelo
▪ Exemplo componente JList.
JList<String> lstDemo = new JList();
ListModel modeloLista = lstDemo.getModel();
public void setModel(ListModel<E> model) Especifica o modelo da lista que
representa o conteúdo da lista, notifica os
“property change listeners” e depois
limpa as seleções da lista.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 279/383


Caixa de Listagem Modelo da Lista 1/6
▪ Construção (Objetos Modelo da Lista)
▪ Formas alternativas
▪ Classe DefaultListModel -
▪ Classe AbstractListModel complexidade de uso … para o programador
▪ Interface ListModel +
▪ Classe DefaultListModel
▪ Cada instância guarda elementos da lista num contentor do tipo Vector.
▪ Gestão dos elementos da lista está toda programada:
▪ Ex: adicionar elemento, remover elemento, obter elemento, obter comprimento …
▪ Classe AbstractListModel
▪ Permite guardar elementos da lista em qualquer tipo de contentor.
▪ Necessário
▪ Criar uma subclasse
▪ Programar
▪ Toda a gestão dos elementos da lista.
▪ Envio de notificações à Vista da Lista (JList) quando Modelo da Vista é alterado.
▪ Para manter Vista da Lista e Modelo da Lista sincronizados
▪ Usando métodos predefinidos.
▪ Interface ListModel
▪ Relativamente à classe anterior
▪ Permite programar também os métodos de evento para notificar o Modelo da Vista.
Nelson Freire (ISEP–DEI-PPROG 2016/17) 280/383
Caixa de Listagem Modelo de Dados 2/6
▪ Usando a Classe DefaultListModel
▪ Classe instanciável
▪ Cada instância guarda elementos da lista num contentor do tipo Vector
▪ Gestão dos elementos da lista está toda programada:
▪ Exemplos: addElement(Object element), removeElement(Object element), getSize(),
getElementAt(int index), …
▪ Exemplo
// Construir Modelo da Lista
DefaultListModel modeloLista = new DefaultListModel();

// Construir a Vista da Lista com o Modelo da Lista


JList lstNomes = new JList( modeloLista );

// Adicionar elementos à lista


modeloLista.addElement("Ana");
modeloLista.addElement("Maria");
modeloLista.addElement("Nuno");

// Remover elementos da lista


modeloLista.removeElement("Ana");

// Obter modelo da lista


DefaultListModel modeloLista = (DefaultListModel) lstNomes.getModel();

Nelson Freire (ISEP–DEI-PPROG 2016/17) 281/383


Caixa de Listagem Modelo de Dados 3/6
▪ Usando a Classe AbstractListModel (1/3)
▪ Fornece métodos “fire”
▪ Para manter Vista da Lista e Modelo da Lista sincronizados
▪ Notificam a Vista da Lista quando o Modelo da Lista é modificado
▪ Declaração
package javax.swing;
import javax.swing.event.*;
import java.io.Serializable;
import java.util.EventListener;
public abstract class AbstractListModel<E> implements ListModel<E>, Serializable {
protected EventListenerList listenerList = new EventListenerList();
public void addListDataListener(ListDataListener l) {…}
public void removeListDataListener(ListDataListener l) {…}
public ListDataListener[] getListDataListeners() {…}

// Para Vista da Lista atualizar os elementos da lista do intervalo [index0, index1]


protected void fireContentsChanged(Object source, int index0, int index1){ … }

// Para Vista da Lista adicionar os elementos da lista do intervalo [index0, index1]


protected void fireIntervalAdded(Object source, int index0, int index1){…}

// Para Vista da Lista remover os elementos da lista do intervalo [index0, index1]


protected void fireIntervalRemoved(Object source, int index0, int index1){…}

public <T extends EventListener> T[] getListeners(Class<T> listenerType){…}


}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 282/383


Caixa de Listagem Modelo de Dados 4/6
▪ Usando a Classe AbstractListModel (2/3)
▪ Criar subclasse … que implementa todos os métodos para gerir os elementos da lista
▪ Exemplo (1/2)

Métodos obrigatórios (herdados de ListModel):


▪ getSize
▪ getElementAt
Métodos restantes:
▪ Opcionais
▪ Nomes definidos pelo programador

Nelson Freire (ISEP–DEI-PPROG 2016/17) 283/383


Caixa de Listagem Modelo de Dados 5/6
▪ Usando a Classe AbstractListModel (3/3)
▪ Exemplo (2/2)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 284/383


Caixa de Listagem Modelo de Dados 6/6
▪ Usando a Interface ListModel
▪ Declaração
package javax.swing;
import javax.swing.event.ListDataListener;
public interface ListModel<E> {
// retorna comprimento da lista
int getSize();

// retorna o item com o índice especificado


E getElementAt(int index);

// adiciona um listener à lista que é notificado


// sempre que ocorre uma alteração do modelo da lista
void addListDataListener(ListDataListener l);

// remove um listener da lista


void removeListDataListener(ListDataListener l);
}

▪ Interesse
▪ Implementar os métodos “fire”
▪ Para manter Vista da Lista e Modelo da Lista sincronizados
▪ Notificam a Vista da Lista quando o Modelo da Lista é modificado

Nelson Freire (ISEP–DEI-PPROG 2016/17) 285/383


Caixa de Listagem Listagem de Strings
▪ Exemplo
▪ Lista de strings de tamanho fixo com painel de deslocamento (ScrollPane)

ScrollPane
Para visualizar toda a lista

Nelson Freire (ISEP–DEI-PPROG 2016/17) 286/383


Caixa de Listagem Bibliografia

▪ http://download.oracle.com/javase/tutorial/uiswing/components/list.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 287/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 288/383


Caixa de
Combinação Noção 1/2
▪ Caixa de Combinação
Botão
▪ É um componente gráfico
▪ Permite ao utilizador
▪ Selecionar uma opção Lista
▪ Formas
▪ Não-Editável // por omissão
▪ Editável
(1) (2)

▪ Caixa de Combinação Não-Editável Caixa de Combinação Não-Editável


▪ Combina os elementos (1 - Lista Escondida ; 2 - Lista Visível)
▪ Botão
Campo de Texto
▪ Lista com Botão

▪ Caixa de Combinação Editável


▪ Combina os elementos Lista

▪ Campo de Texto com Botão


▪ Lista
Caixa de Combinação Editável

Nelson Freire (ISEP–DEI-PPROG 2016/17) 289/383


Caixa de
Combinação Noção 2/2
▪ Botão (Seta)
Botão
▪ Permite ao utilizador
▪ Visualizar a Lista

Lista
▪ Lista
▪ Permite ao utilizador
▪ Selecionar uma opção
(1) (2)

▪ Campo de Texto Caixa de Combinação Não-Editável


▪ Permite ao utilizador (1 - Lista Escondida ; 2 - Lista Visível)
▪ Editar opção selecionada
Campo de Texto
▪ Interesse com Botão
▪ Em listas grandes
▪ Para seleção mais rápida
Lista
▪ Opção escondida

Caixa de Combinação Editável

Nelson Freire (ISEP–DEI-PPROG 2016/17) 290/383


Caixa de
Combinação Interesse
▪ Permitir ao Utilizador
▪ Escolher uma opção ... entre nº considerável de alternativas

▪ Vantagem
▪ Minimização do espaço GUI ocupado
▪ Alternativa
▪ Com Botões de Opção
▪ Ocupa muito mais espaço GUI

Nelson Freire (ISEP–DEI-PPROG 2016/17) 291/383


Caixa de
Combinação Classe JComboBox
▪ Package
▪ javax.swing

▪ Declaração
public class JComboBox<E> extends JComponent
implements ItemSelectable,ListDataListener,ActionListener, Accessible { ... }

Object

Component

Container

JComponent

JComboBox

▪ Tipo E
▪ Especifica tipo de opção da caixa de combinação
Nelson Freire (ISEP–DEI-PPROG 2016/17) 292/383
Caixa de
Combinação Construtores
▪ Mais usados

Declaração Funcionalidade
public JComboBox( ) Constrói caixa de combinação
não-editável com uma lista de
▪ Exemplos opções vazia.
JComboBox cbMarcas = new JComboBox();
JComboBox<String> cbMarcas = new JComboBox();

public JComboBox( E[ ] items) Constrói caixa de combinação


não-editável que mostra os
▪ Exemplo 1 elementos do array
String[ ] marcas = "Audi", "BMW", "Fiat"; especificado;
JComboBox cbMarcas = new JComboBox( marcas ); Por omissão:
▪ Selecionada 1º opção da
▪ Exemplo 2
lista;
String[ ] nums= "1","2","3","4","5","6","7","8","9";
▪ Comprimento máximo da
JComboBox cbDemo = new JComboBox( nums ); lista = 8.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 293/383


Caixa de
Combinação Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent

▪ Próprios (1/3)
▪ Mais usados
Declaração Funcionalidade
public void setEditable(boolean aFlag) Especifica forma da caixa de combinação:
▪ Exemplo – caixa de combinação editável ▪ Editável;
JComboBox cb1 = new JComboBox( ); ▪ Não-Editável.
cb1.setEditable(true);
▪ Exemplo – caixa de combinação não-editável
JComboBox cb2 = new JComboBox( );
cb2.setEditable(false);
public void setMaximumRowCount(int count) Especifica nº máximo de opções visíveis
(comprimento máximo visível da lista);
▪ Exemplo
Se a quantidade total de opções exceder o valor
cb1. setMaximumRowCount(5); especificado, a lista mostra uma scrollbar.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 294/383


Caixa de
Combinação Métodos
▪ Próprios (2/3)

Declaração Funcionalidade
public void addItem(E item) Adiciona opção à lista.
▪ Exemplo
JComboBox cbMarcas = new JComboBox( );
cbMarcas.addItem("Audi");

public void insertItemAt(E item, int index) Adiciona opção à lista, na posição index;
▪ Exemplo índices a partir de 0.
cbMarcas.insertItemAt("Alfa Romeo", 0);
public void removeItem(Object item) Remove opção especificada.
▪ Exemplo
cbMarcas.removeItem("Audi");
public void removeItemAt(int index) Remove opção na posição especificada.

public void removeAllItems() Remove todas as opções da lista.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 295/383


Caixa de
Combinação Métodos
▪ Próprios (3/3)

Declaração Funcionalidade
public void setSelectedIndex(int index) Seleciona opção com índice especificado;
▪ Exemplo índice 0 seleciona 1ª opção da lista;
cbMarcas.setSelectedIndex(2); índice -1 não seleciona opção.

public Object getSelectedItem() Retorna opção selecionada;


▪ Exemplo Numa caixa de combinação editável pode
retornar opção que não foi adicionada à
Object obj = cbMarcas.getSelectedItem(); lista.

Nelson Freire (ISEP–DEI-PPROG 2016/17) 296/383


Caixa de
Combinação Caixa de Combinação Não-Editável com Strings
▪ Exemplo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 297/383


Caixa de
Combinação Eventos 1/2
Tipos de Evento que Caixa de Combinação pode Gerar Evento
Action Selecionado item
Componente adicionado à caixa de combinação
Container
Componente removido da caixa de combinação
Caixa de combinação escondida
Caixa de combinação mostrada
Component
Caixa de combinação movida
Caixa de combinação redimensionada
Caixa de combinação adquire o foco de entrada
Focus
Caixa de combinação perde o foco de entrada
Item Selecionado/desselecionado item
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou na caixa de combinação
Rato saiu da caixa de combinação
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida
Nelson Freire (ISEP–DEI-PPROG 2016/17) 298/383
Caixa de
Combinação Eventos 2/2
▪ Evento Action
▪ Iniciado por seleção de item
▪ Tratamento
▪ Realizado
▪ Objetos de classes que implementem o interface ActionListener
▪ Exemplo

String[ ] marcas = "Audi", "BMW", "Fiat";


JComboBox cbMarcas = new JComboBox( marcas );
cbMarcas.addActionListener(new ActionListener() { // classe (interna) anónima
public void actionPerformed( ActionEvent e ) {
// Método de evento executado após seleção de item
...
}
});

Nelson Freire (ISEP–DEI-PPROG 2016/17) 299/383


Caixa de
Combinação Bibliografia

▪ http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 300/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 301/383


Caixa de
Verificação Classe JCheckBox
▪ Bibliografia
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#checkbox

Nelson Freire (ISEP–DEI-PPROG 2016/17) 302/383


Componentes
Controlos Básicos Sumário
▪ Controlos Básicos
▪ Hierarquia de Classes
▪ Superclasses
▪ AbstractButton
▪ JToggleButton
▪ Botão de Comando
▪ Entrada de Texto
▪ Menu
▪ Caixa de Listagem
▪ Caixa de Combinação
▪ Caixa de Verificação
▪ Botão de Opção

Nelson Freire (ISEP–DEI-PPROG 2016/17) 303/383


Botão de Opção Classe JRadioButton
▪ Bibliografia
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/button.html#radiobutton

Nelson Freire (ISEP–DEI-PPROG 2016/17) 304/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 305/383


Gestores
Posicionamento Sumário
▪ Noção

▪ Tipos

▪ Hierarquia de Classes

▪ Gestores de Posicionamento
▪ BorderLayout
▪ FlowLayout
▪ GridLayout
▪ CardLayout

▪ Combinação de Diferentes Tipos num GUI

Nelson Freire (ISEP–DEI-PPROG 2016/17) 306/383


Gestores
Posicionamento Noção de Gestor de Posicionamento
▪ Gestores de Posicionamento (Layout Managers)
▪ Objetos que gerem dinamicamente a posição de componentes gráficos dentro dos contentores
▪ Exemplo

Gestores de Posicionamento
reposicionam componentes durante
redimensionamento da janela

Gestores de Posicionamento
colocam componentes no
contentor

Contentor de Componentes

Nelson Freire (ISEP–DEI-PPROG 2016/17) 307/383


Gestores
Posicionamento Tipos de Gestores de Posicionamento
▪ Tipos de Gestores de Posicionamento
▪ Nativos
▪ Próprios // Definidos pelo Programador

▪ Nativos
▪ BorderLayout
▪ FlowLayout
Abordados nestes slides
▪ GridLayout
▪ CardLayout
▪ BoxLayout
▪ GridBagLayout
▪ GroupLayout
▪ SpringLayout

Nelson Freire (ISEP–DEI-PPROG 2016/17) 308/383


Gestores
Posicionamento Hierarquia de Classes de Gestores de Posicionamento
▪ Java Fornece uma Classe
▪ Para cada tipo de gestor

▪ Hierarquia de Classes

Object

package java.awt
is-a

BorderLayout SpringLayout FlowLayout GridLayout

LayoutManager2 implements
Serializable
is-a
LayoutManager package java.io
interfaces interface

Hierarquia de Classes de Gestores de Posicionamento

Nelson Freire (ISEP–DEI-PPROG 2016/17) 309/383


Gestores
Posicionamento Gestores BorderLayout 1/12
▪ Usados (por omissão)
▪ Content Pane de componentes JFrame

▪ Interesse
▪ Permitir colocação precisa de componentes gráficos num contentor
▪ Numa posição específica

▪ Exemplo

▪ Colocar a Meio: Número de Cliques


▪ Colocar no Fundo: Botões de Comando

Nelson Freire (ISEP–DEI-PPROG 2016/17) 310/383


Gestores
Posicionamento Gestores BorderLayout 2/12
▪ Funcionamento (1/3)
▪ Dividem um contentor em 5 regiões
▪ Norte
▪ Oeste
▪ Centro
▪ Este
▪ Sul

▪ Colocam automaticamente um componente gráfico na região


▪ Indicada pelo programa
▪ Centro // por omissão

▪ Múltiplos componentes gráficos adicionados na mesma região


▪ Sobrepostos
▪ Visível
▪ Último adicionado

Nelson Freire (ISEP–DEI-PPROG 2016/17) 311/383


Gestores
Posicionamento Gestores BorderLayout 3/12
▪ Funcionamento (2/3)
▪ Dimensões do componente adicionado
▪ Norte e Sul
▪ Altura
▪ Preferida do componente
▪ Modificável via método setPreferredSize()
▪ Para garantir visualização da alteração
▪ Usar o método revalidate()
▪ Largura
▪ Contentor
▪ Oeste e Este
▪ Largura
▪ Preferida do componente
▪ Altura
▪ Altura Contentor – Altura Norte – Altura Sul
▪ Centro
▪ Preenche toda a região

Nelson Freire (ISEP–DEI-PPROG 2016/17) 312/383


Gestores
Posicionamento Gestores BorderLayout 4/12
▪ Funcionamento (3/3)
▪ Redimensão do contentor
▪ Em altura
▪ Altera altura
▪ Este
▪ Centro
▪ Oeste
▪ Em largura
▪ Altera largura
▪ Norte
▪ Centro
▪ Sul

Nelson Freire (ISEP–DEI-PPROG 2016/17) 313/383


Gestores
Posicionamento Gestores BorderLayout 5/12
▪ Configurações de Funcionamento (1/2)
▪ Espaço entre regiões contíguas
▪ Por omissão
▪ Nulo
▪ Exemplo

▪ Modificável pelo programa


▪ Exemplo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 314/383


Gestores
Posicionamento Gestores BorderLayout 6/12
▪ Configurações de Funcionamento (2/2)
▪ Uso das regiões é opcional

Nelson Freire (ISEP–DEI-PPROG 2016/17) 315/383


Gestores
Posicionamento Gestores BorderLayout 7/12
▪ Classe (1/4)
▪ Declaração
public class BorderLayout extends Object
implements LayoutManager2, Serializable { … }

Object

package java.awt
is-a

BorderLayout

implements LayoutManager Serializable

is-a
package java.io
LayoutManager2
interfaces interface

Nelson Freire (ISEP–DEI-PPROG 2016/17) 316/383


Gestores
Posicionamento Gestores BorderLayout 8/12
▪ Classe (2/4)
▪ Construtores // constroem novos objetos gestores BorderLayout

Declaração Funcionalidade
public BorderLayout() Gestor posiciona componentes sem intervalos
entre eles.

public BorderLayout(int hgap, int vgap) Gestor posiciona componentes com intervalos
entre eles.
Intervalo horizontal = hgap píxeis
Intervalo vertical = vgap píxeis

▪ Exemplos de Uso

BorderLayout b1 = new BorderLayout();


vgap
BorderLayout b2 = new BorderLayout( 20, 30 );

hgap

Nelson Freire (ISEP–DEI-PPROG 2016/17) 317/383


Gestores
Posicionamento Gestores BorderLayout 9/12
▪ Classe (3/4)
▪ Métodos de Instância // mais usados

Declaração Funcionalidade
public void setHgap(int hgap) Indica o intervalo horizontal entre componentes.
Unidade de medida é o pixel.
public void setVgap(int vgap) Indica o intervalo vertical entre componentes.
Unidade de medida é o pixel.

▪ Exemplos de Uso

BorderLayout b1 = new BorderLayout();


b1.setVgap(10);
b1.setHgap(20);

Nelson Freire (ISEP–DEI-PPROG 2016/17) 318/383


Gestores
Posicionamento Gestores BorderLayout 10/12
▪ Classe (4/4)
▪ Campos de Classe (mais usados)

Declaração Funcionalidade
public static final String NORTH = "North"; Valor indica região Norte
public static final String SOUTH = "South"; Valor indica região Sul
public static final String EAST = "East"; Valor indica região Este

public static final String WEST = "West"; Valor indica região Oeste

public static final String CENTER = "Center"; Valor indica região Centro

▪ Exemplos de Uso
JPanel p = new JPanel( new BorderLayout() );
JLabel lbl1 = new JLabel("Norte");
JLabel lbl2 = new JLabel("Este");
p.add( lbl1, BorderLayout.NORTH );
p.add( lbl2, BorderLayout.EAST );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 319/383


Gestores
Posicionamento Gestores BorderLayout 11/12
▪ Exemplo – Contador de Cliques
▪ Posicionamento dos Componentes do GUI (Layout)

Centro
Painel
BorderLayout
Sul

Painel Gestor
FlowLayout
Número de Cliques: 0 BorderLayout

Label
Botão de Comando

Nelson Freire (ISEP–DEI-PPROG 2016/17) 320/383


Gestores
Posicionamento Gestores BorderLayout 12/12
▪ Exemplo

public class ContadorGUI extends JFrame {


private JLabel lblNumero;
private static String s = "Número de Cliques: ";
private static final int JANELA_LARGURA = 270;
private static final int JANELA_ALTURA = 150;

public ContadorGUI() {

super("Contador de Cliques");

lblNumero = new JLabel(s + "0");

add( lblNumero, BorderLayout.CENTER );

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA , JANELA_ALTURA );
setLocationRelativeTo(null);
setVisible(true);
}
}
JLabel

Nelson Freire (ISEP–DEI-PPROG 2016/17) 321/383


Gestores
Posicionamento Gestores FlowLayout 1/9
▪ Usados (por omissão)
▪ Paineis (Componentes JPanel)

▪ Interesse
▪ Posicionar componentes gráficos num contentor
▪ Em linha

▪ Exemplo
▪ Alinhar botões de comando na horizontal

Nelson Freire (ISEP–DEI-PPROG 2016/17) 322/383


Gestores
Posicionamento Gestores FlowLayout 2/9
▪ Funcionamento
▪ Usam tamanhos preferidos dos componentes
▪ Modificáveis via método setPreferredSize()
▪ Método setSize(...) não altera tamanho
▪ Visualização garantida por método revalidate()
▪ Colocam componentes em linhas consecutivas
▪ Automaticamente
▪ Por omissão
▪ Linhas alinhadas ao centro
▪ Intervalos entre componentes/bordo Largura
▪ 5 píxeis Alterada
▪ Quando espaço é insuficiente numa linha
▪ Tentam colocar os restantes componentes
na linha seguinte
▪ Quando o contentor é redimensionado, os componentes
▪ São reposicionados automaticamente de
modo a preencherem o espaço disponível Largura
em linhas consecutivas Alterada
▪ Não são redimensionados
▪ Controlam completamente a posição de cada componente
▪ Programador não consegue definir
▪ Posição precisa de um componente
Nelson Freire (ISEP–DEI-PPROG 2016/17) 323/383
Gestores
Posicionamento Gestores FlowLayout 3/9
▪ Configurações de Funcionamento
▪ Alinhamento das linhas de componentes
▪ Esquerda
▪ Direita
▪ Centro

▪ Intervalos entre componentes e entre componentes e bordo do contentor


▪ Vertical
▪ Horizontal

Nelson Freire (ISEP–DEI-PPROG 2016/17) 324/383


Gestores
Posicionamento Gestores FlowLayout 4/9
▪ Classe (1/3)
▪ Declaração
public class FlowLayout extends Object
implements LayoutManager, Serializable { … }

Object

package java.awt is-a

FlowLayout
implements

LayoutManager Serializable

package java.io
interface interface

Nelson Freire (ISEP–DEI-PPROG 2016/17) 325/383


Gestores
Posicionamento Gestores FlowLayout 5/9
▪ Classe (1/3)
▪ Campos de Classe

Declaração Funcionalidade
public static final int LEFT = 0; Valor indica que cada linha de componentes deverá ser
alinhada à esquerda.

public static final int CENTER = 1; Valor indica que cada linha de componentes deverá ser
alinhada ao centro.

public static final int RIGHT = 2; Valor indica que cada linha de componentes deverá ser
alinhada à direita.

▪ Exemplos de Uso
FlowLayout.LEFT
FlowLayout.CENTER
FlowLayout.RIGHT

Nelson Freire (ISEP–DEI-PPROG 2016/17) 326/383


Gestores
Posicionamento Gestores FlowLayout 6/9
▪ Classe (2/3)
▪ Construtores // constroem novos objetos gestores FlowLayout

Declaração Funcionalidade
public FlowLayout() Alinhamento de linhas centrado.
Intervalos horizontais e verticais entre
componentes e entre componentes e o
bordo de 5 píxeis.
public FlowLayout(int align) Alinhamento das linhas align.
Intervalos horizontais e verticais de 5 píxeis.
public FlowLayout(int align, int hgap, int vgap) Alinhamento das linhas align.
Intervalos horizontais e verticais de hgap e
vgap píxeis, respetivamente.

▪ Exemplos de Uso
FlowLayout f1 = new FlowLayout();
FlowLayout f2 = new FlowLayout( FlowLayout.LEFT);
FlowLayout f3 = new FlowLayout( FlowLayout.RIGHT);
FlowLayout f4 = new FlowLayout( FlowLayout.RIGHT, 20, 30 );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 327/383


Gestores
Posicionamento Gestores FlowLayout 7/9
▪ Classe (3/3)
▪ Métodos de Instância // mais usados

Declaração Funcionalidade
public void setAlignment(int align) Indica alinhamento align do gestor FlowLayout

public void setHgap(int hgap) Indica intervalo horizontal entre componentes e entre
componentes e bordo do contentor.
Unidade de medida é o pixel.
public void setVgap(int vgap) Indica intervalo vertical entre componentes e entre
componentes e bordo do contentor.
Unidade de medida é o pixel.

▪ Exemplos de Uso
FlowLayout f1 = new FlowLayout();
f1.setAlignment( FlowLayout.LEFT ); // alinhamento especificado por campo de classe LEFT
f1.setVgap( 10 );
f1.setHgap( 20 );

Nelson Freire (ISEP–DEI-PPROG 2016/17) 328/383


Gestores
Posicionamento Gestores FlowLayout 8/9
▪ Exemplo
▪ Posicionamento dos Componentes do GUI (Layout)

Centro
Painel
BorderLayout
Painel
Sul
FlowLayout

Painel Gestor
Flowlayout
Número de Cliques: 0 BorderLayout

Label
Botão de Comando

Nelson Freire (ISEP–DEI-PPROG 2016/17) 329/383


Gestores
Posicionamento Gestores FlowLayout 9/9
▪ Exemplo public class ContadorGUI extends JFrame {
private JLabel lblNumero;
private JButton btnIncrementar, btnReiniciar;
private static String s = "Número de Cliques: ";
private static final int JANELA_LARGURA = 270;
private static final int JANELA_ALTURA = 150;
public ContadorGUI() {
super("Contador de Cliques");
lblNumero = new JLabel(s + "0");
JPanel p = criarPainelBotoes();
add(lblNumero, BorderLayout.CENTER);
add(p,BorderLayout.SOUTH);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA , JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
private JPanel criarPainelBotoes(){
btnIncrementar = new JButton("Incrementar");
btnReiniciar = new JButton("Reiniciar");
JPanel p = new JPanel();
p.add(btnIncrementar);
p.add(btnReiniciar);
return p;
}
JButton }

Nelson Freire (ISEP–DEI-PPROG 2016/17) 330/383


Gestores
Posicionamento Gestores GridLayout 1/6
▪ Divide contentor em
▪ Linhas e colunas // semelhante a folha de cálculo
▪ Programador define nº de linhas e nº de colunas
▪ Todas as células têm sempre o tamanho igual
▪ Componentes gráficos são redimensionados na mesma proporção do redimensionamento do
contentor

Contentor
GridLayout

Redimensionamento de Contentor GridLayout

Nelson Freire (ISEP–DEI-PPROG 2016/17) 331/383


Gestores
Posicionamento Gestores GridLayout 2/6
▪ Construtor permite especificar
▪ Número de linhas e de colunas
▪ Exemplo
GridLayout g = new GridLayout(3,3);
▪ Opcionalmente, o intervalo entre linhas (intH) e colunas ( intV)
▪ Sintaxe
▪ GridLayout( nº inhas, nº colunas, intH, intV)
▪ Exemplo
GridLayout g = new GridLayout(3,3,4,5);
▪ Unidade de medida = Pixel

▪ Posicionamento de componentes
▪ Colocados linha-a-linha (1ª, depois 2ª, etc.)
▪ Exemplo Intervalo entre Componentes
JPanel pane = new JPanel( g );
pane.add( new JButton("Um") ); // ocupará posição (1,1)
pane.add( new JButton("Dois") ); // ocupará posição (1,2)
...
Nelson Freire (ISEP–DEI-PPROG 2016/17) 332/383
Gestores
Posicionamento Gestores GridLayout 3/6
▪ Definição da Grid (1/3)
▪ Nº de Linhas = Nº de Colunas = 0 // Ex: GridLayout g = new GridLayout(0,0);
▪ Erro de execução
▪ Nº de Linhas > 0
▪ Nº de colunas é irrelevante // pode ser qualquer nº
▪ Gestor maximiza uso de linhas
▪ Exemplos
▪ Nº de linhas = 1: todos os componentes colocados na mesma linha
GridLayout g = new GridLayout(1,0);
GridLayout g = new GridLayout(1,5);

(1,0)
(1,5)

▪ Nº de linhas = 5
GridLayout g = new GridLayout(5,0);
GridLayout g = new GridLayout(5,3); (5,0)
(5,3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 333/383


Gestores
Posicionamento Gestores GridLayout 4/6
▪ Definição da Grid (2/3)
▪ Nº de Linhas > 0
▪ Exemplos
GridLayout g = new GridLayout(9,0);
GridLayout g = new GridLayout(9,3);
GridLayout g = new GridLayout(9,5);

(9,0)
(9,3)
(9,5)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 334/383


Gestores
Posicionamento Gestores GridLayout 5/6
▪ Definição da Grid (3/3)
▪ Nº de Linhas = 0
▪ Nº de colunas especificado é relevante
▪ Gestor maximiza uso de colunas
▪ Exemplos
▪ Nº de Colunas = 1
GridLayout g = new GridLayout(0,1);
▪ Todos componentes colocados na mesma coluna

▪ Nº de Colunas = 3
GridLayout g = new GridLayout(0,3);
▪ Componentes distribuídos por 3 colunas

▪ Nº de Colunas = 9
GridLayout g = new GridLayout(0,9);

Nelson Freire (ISEP–DEI-PPROG 2016/17) 335/383


Gestores
Posicionamento Gestores GridLayout 6/6
▪ Exemplo (completo)
import javax.swing.*;
public class GridLayoutGUIDemo extends JFrame {
private static final int JANELA_LARGURA = 400;
private static final int JANELA_ALTURA = 200;
public GridLayoutGUIDemo() {
super("GridLayout");
setLayout( new GridLayout(3,3) );

add( new JButton("Um") );


add( new JButton("Dois") );
add( new JButton("Três") );
add( new JButton("Quatro" ) );
add(new JButton("Cinco" ) );
add(new JButton(" Seis") );
add(new JButton("Sete") );

setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 336/383


Gestores
Posicionamento Gestores CardLayout 1/7
▪ Exemplo (direita)
▪ Aplicação permite trocar o painel visível entre 3 painéis que
partilham a mesma área do GUI
▪ Interesse
▪ Gerir a troca do componente visível, entre vários escondidos, que
partilham a mesma área do GUI
▪ i.e., mostrar um componente de cada vez, entre vários
▪ Em geral, esses componentes são contentores JPanel
▪ Análogo a uma pilha de cartões (ex: bancários)
▪ Só o cartão de cima é visível
▪ Cartão é um contentor de elementos
▪ Daí, chamar cartões (cards) aos componentes geridos
▪ Troca do cartão visível
▪ Feita pela aplicação
▪ Pode ser originada pelo utilizador através de outros componentes
▪ Exemplo
▪ Botões de comando // Águia, Dragão e Leão

Contentor CardLayout

Nelson Freire (ISEP–DEI-PPROG 2016/17) 337/383


Gestores
Posicionamento Gestores CardLayout 2/7
▪ Formas de trocar cartão visível
▪ Pedindo o primeiro ( first ) ou último ( last ) cartão
▪ Segundo a ordem de adição dos cartões ao contentor
▪ Métodos de instância CardLayout
public void first( ContainerCardLayout parent )
public void last(ContainerCardLayout parent )

▪ Atravessando a pilha para o cartão seguinte ( next ) ou cartão anterior ( previous )


▪ Segundo a ordem de adição dos cartões ao contentor
▪ Métodos de instância CardLayout
public void next ( ContainerCardLayout parent )
▪ último  primeiro
public void previous ( ContainerCardLayout parent )
▪ primeiro  último

▪ Pedindo o cartão com o nome especificado na adição


▪ Método de instância CardLayout
public void show (ContainerCardLayout parent , String name)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 338/383


Gestores
Posicionamento Gestores CardLayout 3/7
▪ Procedimento para usar (1/2)
1. Criar um contentor de componentes gerido por um CardLayout

2. Criar um contentor para cada cartão

3. Adicionar cada cartão criado ao contentor CardLayout (pilha)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 339/383


Gestores
Posicionamento Gestores CardLayout 4/7
▪ Procedimento para usar (2/2)
4. Trocar o cartão visível

Nelson Freire (ISEP–DEI-PPROG 2016/17) 340/383


Gestores
Posicionamento Gestores CardLayout 5/7
▪ Exemplo Completo (1/3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 341/383


Gestores
Posicionamento Gestores CardLayout 6/7
▪ Exemplo Completo (2/3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 342/383


Gestores
Posicionamento Gestores CardLayout 7/7
▪ Exemplo Completo (3/3)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 343/383


Gestores
Posicionamento Combinação de Vários Tipos de Gestores

North

Contentor
Contentor
Center BorderLayout
GridLayout

Contentor Contentores
GridLayout CardLayout
FlowLayout

West Center East


Contentor
BorderLayout
Nelson Freire (ISEP–DEI-PPROG 2016/17) 344/383
Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 345/383


Eventos Sumário
▪ Conceitos Básicos
▪ Manipulação de Eventos
▪ Demos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 346/383


Eventos
Conceitos Básicos Sumário
▪ Conceitos Básicos
▪ Noção de Evento

▪ Tipos de Evento

▪ Classes de Evento
▪ Noção
▪ Hierarquia

▪ Interfaces Trata Evento


▪ Noção
▪ Hierarquia
▪ Métodos de Evento

▪ Tipos de Eventos Gerados por Componentes


▪ Principais

Nelson Freire (ISEP–DEI-PPROG 2016/17) 347/383


Eventos Noção de Evento
▪ Funcionamento de Aplicações GUI
▪ É orientado por eventos
▪ Em geral, só executam ações após a ocorrência
de acontecimentos, tais como: Aplicação GUI
▪ Cliques no botão do rato Tratamento de Eventos
▪ Movimentos do rato
▪ Teclas premidas Captura de Eventos

Eventos

Sistema Operativo
▪ Sistema operativo que suporta aplicações GUIs
▪ Monitoriza constantemente eventos
▪ Reporta esses eventos às aplicações em execução
▪ Cada aplicação decide a forma de responder a
esses eventos
▪ Faz a captura e o tratamento dos eventos
Aplicação GUI é orientada por Eventos
▪ Quais são os eventos que aplicação GUI pode
manipular?

Nelson Freire (ISEP–DEI-PPROG 2016/17) 348/383


Eventos Tipos de Evento
Tipo de Evento Evento Tipos de Evento Evento
Clique num botão de comando Componente adicionado
Container
Clique num item de menu Componente removido
Action
Terminada edição de campo de texto Item selecionado
Item
Selecionado item de caixa de combinação Item desselecionado
Componente escondido Adjustment Scrollbar movido
Componente mostrado Componente ganha foco
Component Focus
Componente movido Componente perde foco
Componente redimensionado Text Texto alterado
Tecla mantida premida Janela abriu
Key Tecla libertada Janela fechou
Tecla premida (toque) Janela ficou activa
Clique no rato Janela ficou inactiva
Rato entrou no componente Window
Janela ficou minimizada
Rato saiu do componente Janela ficou restaurada
Botão do rato premido (tamanho original)
Mouse
Botão do rato libertado Utilizador quer fechar Janela
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida
▪ Eventos iniciados pelo utilizador
▪ Eventos do rato
▪ Movimentos // tipo Mouse
▪ Cliques // tipo Action, Mouse
▪ Eventos do teclado
▪ Teclas pressionadas // tipo Key
Nelson Freire (ISEP–DEI-PPROG 2016/17) 349/383
Eventos Classes de Evento
▪ Cada Tipo de Evento
▪ Representado por classe de evento // Ex: tipo Action representado por classe ActionEvent
▪ Classes de Evento
▪ Pertencem à hierarquia de classes ilustrada
▪ São subclasses de EventObject
▪ Topo da hierarquia (superclasse)

Object Packages:
• java.util ( EventObject )
• Java.lang ( Object )
EventObject

AWTEvent

TextEvent ActionEvent AdjustmentEvent ComponentEvent ItemEvent

ContainerEvent FocusEvent InputEvent PaintEvent WindowEvent

KeyEvent MouseEvent

package java.awt.event MouseWheelEvent

Nelson Freire (ISEP–DEI-PPROG 2016/17) 350/383


Eventos Interfaces Trata Evento
▪ Cada Tipo de Evento
▪ Tem um interface associado
▪ Exemplos: Tipo Action ↔ Interface ActionListener // tipo de Evento + Listener
Tipo Window ↔ Interface WindowListener
▪ Pertencem à hierarquia de interfaces ilustrada
▪ São subinterfaces de EventListener // Topo da Hierarquia (superinterface)

EventListener
ContainerListener TextListener

KeyListener MouseWheelListener

FocusListener MouseListener

ActionListener WindowListener

AdjustmentListener ItemListener package java.awt.event


Excepto EventListener
ComponentListener (java.util)

▪ Especificam
▪ Métodos de evento para tratar todos os eventos do tipo correspondente // slides seguintes
Nelson Freire (ISEP–DEI-PPROG 2016/17) 351/383
Eventos Métodos de Evento 1/2
Evento Classe de Evento Interface Trata Evento Método de Evento
Clique num botão de comando
Clique num item de menu
ActionEvent ActionListener actionPerformed(ActionEvent e)
Termina edição de campo de texto
Selecionado item caixa combinação
Item seleccionado/desseleccionado ItemEvent ItemListener itemStateChanged(ItemEvent e)
Componente escondido componentHidden(ComponentEvent e)
Componente mostrado componentShown(ComponentEvent e)
ComponentEvent ComponentListener
Componente movido componentMoved(ComponentEvent e)
Componente redimensionado componentResized(ComponentEvent e)
Componente adquire foco focusGained(FocusEvent e)
FocusEvent FocusListener
Componente perde foco focusLost(FocusEvent e)
Tecla mantida premida keyPressed(KeyEvent e)
Tecla libertada KeyEvent KeyListener keyReleased(KeyEvent e)
Tecla premida keyTyped(KeyEvent e)
Clique no rato mouseClicked(MouseEvent e)
Rato entrou no componente mouseEntered(MouseEvent e)
Rato saiu do componente MouseListener mouseExited(MouseEvent e)
Botão do rato premido mousePressed(MouseEvent e)
MouseEvent
Botão do rato libertado mouseReleased(MouseEvent e)
Rato movido mouseMoved(MouseEvent e)
MouseMotionListener
Rato arrastado (movido + premido) mouseDragged(MouseEvent e)
Roda do rato movida MouseWheelListener mouseWheelMoved(MouseWheelEvent e)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 352/383


Eventos Métodos de Evento 2/2

Interface
Evento Classe de Evento Método de Evento
Trata Evento
Componente adicionado componentAdded(ContainerEvent e)
ContainerEvent ContainerListener
Componente removido componentRemoved(ContainerEvent e)
Scrollbar movido AdjustmentEvent AdjustmentListener adjutmentValue(AdjustmentEvent e)
Texto alterado TextEvent TextListener textValueChanged(TextEvent e)
Janela abriu windowOpened(WindowEvent e)
Janela fechou windowClosed(WindowEvent e)
Janela ficou activa windowActivated(WindowEvent e)
Janela ficou inactiva WindowEvent WindowListener windowDeactivated(WindowEvente)
Janela ficou minimizada windowIconified(WindowEvent e)
Janela restaurada (tamanho original) windowDeiconified(WindowEvent e)
Utilizador quer fechar Janela windowClosing(WindowEvent e)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 353/383


Eventos Tipos de Eventos Gerados por Componentes GUI
Componente Action Adjustment Component Container Focus Item Key Mouse Text Window
JButton
JCheckBox
JComboBox
JComponent
Container
JDialog
JFileDialog
JFrame
JLabel
JList
JMenu
JMenuItem
JPopupMenu
JPanel
JScrollBar
JScrollPane
JTextArea
JTextComponent
JTextField
Window

Nelson Freire (ISEP–DEI-PPROG 2016/17) 354/383


Eventos Principais Eventos Gerados por Componentes GUI
Componente Evento Tipo de Evento Gerado
JButton Clique no botão
JComboBox Selecionado item
JList Duplo clique Action
JMenuItem Selecionado Item de menu
JTextField Terminada edição de texto com ENTER
JCheckBox Selecionado ou desselecionado
JCheckboxMenuItem Selecionado ou desselecionado Item
JList Selecionado ou desselecionado item
JTextComponent Texto alterado Text
JScrollBar Scrollbar movido Adjustment
Componente movido, redimensionado, escondido ou mostrado Component
Componente adquire ou perde foco Focus
JComponent
Tecla pressionada ou libertada Key
Rato com botão pressionado ou libertado Mouse
Window Utilizador quer fechar janela Window

Nelson Freire (ISEP–DEI-PPROG 2016/17) 355/383


Eventos
Manipulação Sumário
▪ Manipulação de Eventos

▪ Modelo de Eventos AWT


▪ Trata Evento
▪ Objeto Evento
▪ Fonte de Evento

▪ Tratamento de Eventos

▪ Classes de Objetos Trata Evento


▪ Externas
▪ Internas
▪ Anónimas

▪ Classes Adapter

Nelson Freire (ISEP–DEI-PPROG 2016/17) 356/383


Eventos
Manipulação Manipulação de Eventos
▪ Aplicações GUI precisam de fazer:
▪ Captura de eventos
▪ Tratamento de eventos
Aplicação GUI
▪ Programador precisa de conhecer
Tratamento de Eventos
▪ Modelo de Eventos (AWT)

Captura de Eventos

Eventos

Sistema Operativo

Aplicação GUI é orientada por Eventos

Nelson Freire (ISEP–DEI-PPROG 2016/17) 357/383


Eventos
Manipulação Modelo de Eventos (AWT)
▪ Exemplo de um Evento Action Gerado por um Botão de Comando (1/3)

Evento
Gera
comunicado a Objeto Trata Evento
Botão de Comando Evento
Objeto Trata Evento executa
acionado tipo
registado Método de Evento
Action
no Botão de Comando

Objeto Fonte de Evento Objeto Trata Evento


tipo tipo
Botão de Comando Objeto de Evento ActionListener
tipo
ActionEvent (Registado no Botão)
Registo
Objeto Trata Evento (Avisa Objeto Trata Evento) Método de Evento
Tipo /* recebe por parâmetro
ActionListener Referência o Objeto de Evento */
do
Método de Registo Botão de Comando
implementa
addActionListener(ActionListener l)
Interface
ActionListener
Método de Evento
actionPerformed(ActionEvent e)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 358/383


Eventos
Manipulação Modelo de Eventos (AWT)
▪ Exemplo de um Evento Action Gerado por um Botão de Comando (2/3)
▪ Classe Interna para Manipular o Evento

Objeto Fonte do Evento

Criação do Objeto Trata Evento

Registo do Objeto Trata Evento

Método de Evento
do
Objeto Trata Evento

/* recebe, por parâmetro, o


Objeto de Evento enviado pelo
botão btnSair */

Nelson Freire (ISEP–DEI-PPROG 2016/17) 359/383


Eventos
Manipulação Modelo de Eventos (AWT)
▪ Exemplo de um Evento Action Gerado por um Botão de Comando (3/3)
▪ Classe Anónima para Manipular o Evento

Objeto Fonte do Evento

Registo do Objeto Trata Evento


(instância de classe anónima)

Método de Evento
do
Objeto Trata Evento

/* Recebe, por parâmetro, o


Objeto de Evento enviado pelo
botão btnSair */
Nelson Freire (ISEP–DEI-PPROG 2016/17) 360/383
Eventos
Manipulação Modelo de Eventos (AWT)
▪ Tipos de Objetos Envolvidos num Evento
▪ Fonte de Evento /* Gera um tipo de evento e comunica-o, através de objetos Evento, a
objetos Trata Evento registados nessa fonte e nesse tipo de evento */
// Num evento, existe apenas uma fonte

▪ Evento // Comunica o evento a um objeto Trata Evento


// Gerado pela Fonte de Evento (um para cada objeto Trata Evento)

▪ Trata Evento // Trata o evento após notificação recebida num objeto Evento
// Podem existir múltiplos

Evento Trata
Evento

Fonte de Evento Trata


Evento Evento

Evento Trata
Evento

Modelo de Eventos (AWT)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 361/383


Eventos
Manipulação Objeto Trata Evento 1/2
▪ Responsabilidade
▪ Tratar um evento após notificação recebida num objeto Evento

Trata
Evento Evento

Fonte de Evento Trata Interface


Evento Evento Trata Evento

Implementa
Evento Trata
Evento

Modelo de Eventos (AWT)

▪ Têm de ser objetos de classes que implementem Interfaces Trata Evento


▪ Designadas Classes Trata Evento
▪ Interface Trata Evento deve corresponder ao tipo de evento a tratar
▪ Exemplos
▪ Slide seguinte

Nelson Freire (ISEP–DEI-PPROG 2016/17) 362/383


Eventos
Manipulação Objeto Trata Evento 2/2
▪ Exemplos de classes Trata Evento
▪ Para tratar eventos do tipo Action
• Implementar interface ActionListener  implementar método de evento actionPerformed
especificado pela interface
• Para tratar eventos do tipo Mouse
• Implementar interface MouseListener e/ou MouseMotionListener  têm de implementar
todos os métodos de evento correspondentes descritos na tabela abaixo
• Alternativa, herdar a classe MouseAdapter (Classes Adapter apresentadas mais adiante):
• Permitem implementar apenas alguns dos métodos especificados pela Interface
Evento Classe de Evento Interface Trata Evento Método de Evento
Clique num botão de comando
Clique num item de menu
ActionEvent ActionListener actionPerformed(ActionEvent e)
Termina edição de campo de texto
Selecionado item caixa de combinação
Clique no rato mouseClicked(MouseEvent e)
Rato entrou no componente mouseEntered(MouseEvent e)
Rato saiu do componente MouseListener mouseExited(MouseEvent e)
Botão do rato premido MouseEvent mousePressed(MouseEvent e)
Botão do rato libertado mouseReleased(MouseEvent e)
Rato movido mouseMoved(MouseEvent e)
MouseMotionListener
Rato arrastado (movido + premido) mouseDragged(MouseEvent e)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 363/383


Eventos
Manipulação Fonte de Evento 1/2
▪ Responsabilidade
▪ Gerar um tipo de evento e comunicá-lo aos objetos Trata Evento registados nesse tipo de evento
▪ A comunicação do evento é feita através de objetos de Evento

▪ É componente GUI Trata


Evento
▪ Exemplos Evento
▪ Botão de comando // objeto JButton
Fonte de Evento Trata
▪ Label // objeto JLabel Evento Evento
▪ Campo de texto // objeto JTextField

▪ Cada Componente GUI fornece Evento Trata


Evento
▪ Métodos para registar objetos Trata Evento dos
tipos de evento que pode gerar Modelo de Eventos (AWT)
▪ Um método para cada tipo de evento que pode gerar
▪ Nome e parâmetro do género
▪ addEventListener( EventListener l ) // Event varia: Action, Mouse, etc.
▪ Exemplos
▪ addActionListener( ActionListener l ) // regista objetos Trata Evento de eventos tipo Action
▪ addMouseListener( MouseListener l ) // regista objetos Trata Evento de eventos tipo Mouse
▪ addKeyListener( KeyListener l ) // regista objetos Trata Evento de eventos tipo Key
Nelson Freire (ISEP–DEI-PPROG 2016/17) 364/383
Eventos
Manipulação Fonte de Evento 2/2
▪ Exemplo do Botão de Comando (tipo JButton)
▪ Fornece os seguintes métodos para registar objetos Trata Evento
▪ public void addActionListener( ActionListener l )
▪ public synchronized void addComponentListener( ComponentListener l )
▪ public synchronized void addFocusListener( FocusListener l )
▪ public synchronized void addKeyListener( KeyListener l )
▪ public synchronized void addMouseListener( MouseListener l )
▪ public synchronized void addMouseMotionListener( MouseMotionListener l )
▪ public synchronized void addMouseWheelListener(MouseWheelListener l)

Componente Action Adjustment Component Container Focus Item Key Mouse Text Windows
JButton
JDialog
JFrame
JLabel
JList
JMenu
JMenuItem
JPanel
JTextField
Window

Nelson Freire (ISEP–DEI-PPROG 2016/17) 365/383


Eventos
Manipulação Objeto Evento 1/5
▪ Gerado
▪ Pela Fonte de Evento
▪ Enviado
▪ Aos objetos Trata Evento desse evento, registados na Fonte de Evento
▪ Responsabilidade
▪ Encapsular informação sobre o evento ocorrido
▪ Exemplo
▪ Referência do componente Fonte de Evento
▪ Título do botão de comando // identifica a ação pretendida
Trata
Evento

Fonte de Trata Interface


Evento Evento Trata Evento

Evento Implementa
Trata
Informação Evento
sobre o Evento

Modelo de Eventos (AWT)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 366/383


Eventos
Manipulação Objeto Evento 2/5
▪ É instância de Classe de Evento
▪ Existe uma dessas classes para cada tipo de evento
▪ Exemplos
Evento Tipo de Evento Classe de Evento
Clique num JButton
Clique num JMenuItem
Action ActionEvent
Termina a edição de um TextField
Selecionado item caixa de combinação
Item selecionado/desselecionado Item ItemEvent
Componente escondido
Componente mostrado
Component ComponentEvent
Componente movido
Componente redimensionado
Componente adquire foco
Focus FocusEvent
Componente perde foco
Clique no rato
Rato entrou no componente
Rato saiu do componente MouseEvent
Rato com botão premido Mouse
Rato com botão libertado
Rato movido
MouseMotionEvent
Rato arrastado (movido + premido)

Nelson Freire (ISEP–DEI-PPROG 2016/17) 367/383


Eventos
Manipulação Objeto Evento 3/5
▪ Passado por Parâmetro
▪ Aos métodos de evento dos objetos Trata Evento
▪ Exemplo

Parâmetro e
• Passa para dentro do método o objeto
Evento gerado pela Fonte de Evento
▪ Métodos (mais usados)
Método Obs
public Object getSource() • Retorna o objeto Fonte do Evento
• Permite a um método de evento processar diferentes fontes
• Exemplo: e.getSource() • Exemplo: e.getSource() == btnSair
public String getActionCommand() • Retorna o título do comando associado a esta ação
• Permite identificar a ação pretendida
• Só disponível em eventos do tipo Action
• Exemplo: e.getActionCommand(); • Exemplo: retorna o título do botão Sair
Nelson Freire (ISEP–DEI-PPROG 2016/17) 368/383
Eventos
Manipulação Objeto Evento 4/5

Nelson Freire (ISEP–DEI-PPROG 2016/17) 369/383


Eventos
Manipulação Objeto Evento 5/5

Método de Evento
trata eventos do tipo
Action gerados por
duas Fontes de
Evento diferentes

Nelson Freire (ISEP–DEI-PPROG 2016/17) 370/383


Eventos
Manipulação Tratamento de Eventos 1/2
▪ Procedimento

1. Criar classe de objetos Trata Evento

2. Criar objeto Trata Evento

3. Registar objeto Trata Evento na Fonte de Evento

Nelson Freire (ISEP–DEI-PPROG 2016/17) 371/383


Eventos
Manipulação Tratamento de Eventos 2/2
Procedimento – Passo 1: Criar Classe Trata Evento
▪ Pode haver duas formas:
▪ Através da Implementação de um Interface Trata Evento
▪ Interface Trata Evento do tipo de evento a tratar
▪ Exemplo: clique num botão de comando (tipo JButton)
▪ JButton gera evento do tipo Action

Classe Trata Evento deve implementar interface ActionListener
▪ Através da Herança de uma Classe Adapter
▪ Usada em casos particulares // analisaremos mais adiante
▪ Relativamente à Localização, uma Classe Trata Evento pode ser:
▪ Classe Externa // permite o seu uso em diferentes classes
▪ Classe Interna // permite acesso a membros inacessíveis de uma classe
▪ Identificada // permite criar múltiplos Objetos de Evento
// permite tratar múltiplas Fontes de Evento
▪ Anónima // permite tratar apenas um tipo de evento de uma Fonte
▪ Exemplos
▪ Próximos Slides

Nelson Freire (ISEP–DEI-PPROG 2016/17) 372/383


Eventos
Manipulação Classe Trata Evento Externa
▪ Interesse: ser reutilizada em múltiplas classes
▪ Possível: se não precisar de membros inacessíveis de outras classes
public class TrataEventoAction implements ActionListener { // Classe Trata Evento Externa
public void actionPerformed(ActionEvent e) {
// código de resposta a eventos do tipo Action; p.ex., gerado pelo botão
}
}
public class DemoTrataEventoAction1 extends JFrame {
private static final int JANELA_LARGURA = 200;
private static final int JANELA _ALTURA = 200;
public DemoTrataEventoAction1() {
super("Demo Trata Evento Action");
add( criarBotao() );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(JANELA_LARGURA, JANELA_ALTURA);
setVisible(true);
}
private JButton criarBotao(){
JButton btn = new JButton("Calcular");
TrataEventoAction t = new TrataEventoAction(); // cria objeto t para tratar eventos tipo Action
btn.addActionListener( t ); /* regista objeto t para tratar o evento Action do botao btn */
return btn;
}
}
public class Main {
public static void main(String[] args) { new DemoTrataEventoAction1(); }
}

Nelson Freire (ISEP–DEI-PPROG 2016/17) 373/383


Eventos
Manipulação Classe Trata Evento Interna (Identificada)
▪ Interesse
▪ Classe interna: acesso a membros de classe inacessíveis do exterior
▪ Identificação: criar vários objetos Trata Evento e tratar eventos de múltiplas Fontes de Evento
public class DemoTrataEventoAction2 extends JFrame {
private static final int JANELA_LARGURA = 200;
private static final int JANELA_ALTURA = 200;
public DemoTrataEventoAction2() {
super("Demo Trata Evento Action");
add( criarBotao() );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(JANELA_LARGURA, JANELA_ALTURA);
setVisible(true);
}
private JButton criarBotao(){
JButton btn = new JButton("Calcular");
TrataEventoAction t = new TrataEventoAction(); // cria objeto t para tratar eventos tipo Action
btn.addActionListener( t ); /* regista objeto t para tratar o evento Action do botao btn */
return btn;
}
private class TrataEventoAction implements ActionListener { // Classe Trata Evento Interna
public void actionPerformed(ActionEvent e) {
// código de resposta ao evento tipo Action; p.ex., gerado pelo botão
}
}
}
public class Main { public static void main(String[] args) { new DemoTrataEventoAction2(); } }

Nelson Freire (ISEP–DEI-PPROG 2016/17) 374/383


Eventos
Manipulação Classe Trata Evento Anónima
▪ Interesse: tratar apenas um tipo de evento de uma Fonte de Evento
public class DemoTrataEventoAction3 extends JFrame {
private static final int JANELA_LARGURA = 200;
private static final int JANELA_ALTURA = 200;
public DemoTrataEventoAction3() {
super("Demo Trata Evento Action");
add( criarBotao() );
setDefaultCloseOperation( EXIT_ON_CLOSE );
setSize(JANELA_LARGURA, JANELA_ALTURA);
setVisible(true);
}
private JButton criarBotao(){
JButton btn = new JButton("Calcular");
btn.addActionListener( new ActionListener() { // Classe Trata Evento Anónima
// Objeto Trata Evento é instanciado e registado
public void actionPerformed(ActionEvent e) {
// código de resposta ao evento tipo Action gerado apenas pelo botão
}
});
return btn;
}
}
public class Main { public static void main(String[] args) { new DemoTrataEventoAction3(); } }

Nelson Freire (ISEP–DEI-PPROG 2016/17) 375/383


Eventos
Manipulação Classes Adapter 1/2
▪ Interesse
▪ Simplificar criação de Classes Trata Evento que precisam de implementar apenas alguns métodos de
Interfaces Trata Evento que especificam múltiplos métodos
▪ Exemplo
▪ Interface WindowListener especifica vários métodos e obriga a sua implementação em classes
instanciáveis
▪ windowOpened(WindowEvent e)
▪ windowClosed(WindowEvent e)
▪ windowActivated(WindowEvent e)
▪ windowDeactivated(WindowEvente)
▪ windowIconified(WindowEvent e)
▪ windowDeiconified(WindowEvent e)
▪ windowClosing(WindowEvent e)
▪ Em muitas situações
▪ Apenas precisamos de tratar alguns destes métodos

▪ Java fornece Classe Adapter para cada Interface Trata Evento com múltiplos métodos especificados
▪ Exemplos
▪ WindowAdapter
▪ MouseAdapter
Nelson Freire (ISEP–DEI-PPROG 2016/17) 376/383
Eventos
Manipulação Classes Adapter 2/2
▪ Usadas para definir Classes Trata Evento
▪ Têm de ser herdadas da classe Adapter
▪ Reescrevem apenas métodos de evento necessários
▪ Exemplos

// Classe Trata Evento Externa ou Interna


public class TrataEventoTerminator extends WindowAdapter {
public void windowClosing (WindowEvent e) { // implementado apenas o método pretendido
System.exit(0);
}
}

// Classe Trata Evento Anónima

JFrame janela = new JFrame();


janela.addWindowListener(new WindowAdapter() { // Classe anónima
public void windowClosing(WindowEvent e) {
System.exit(0);
});

Nelson Freire (ISEP–DEI-PPROG 2016/17) 377/383


Eventos
Demos Sumário
▪ Demos

▪ Duplo-Clique numa JLabel

▪ Confirmação no Botão Fechar da Janela

Nelson Freire (ISEP–DEI-PPROG 2016/17) 378/383


Eventos
Demos Demos 1/2
▪ Duplo-Clique numa JLabel

JLabel

Nelson Freire (ISEP–DEI-PPROG 2016/17) 379/383


Eventos
Demos Demos 2/2
▪ Confirmação no Botão Fechar da Janela

Nelson Freire (ISEP–DEI-PPROG 2016/17) 380/383


Interfaces
Gráficas Sumário Geral
▪ Introdução

▪ Componentes Gráficos
▪ Introdução
▪ Hierarquia de Classes
▪ Interfaces
▪ Categorias
▪ Contentores de Componentes Gráficos
▪ Apresentação de Informação
▪ Controlos Básicos

▪ Gestores de Posicionamento

▪ Manipuladores de Eventos

▪ Bibliografia Geral

▪ Índice Remissivo

Nelson Freire (ISEP–DEI-PPROG 2016/17) 381/383


Bibliografia Geral
▪ Livro
• Core Java, Volume I – Fundamentals
Cay S. Horstmann and Gary Cornell
Eighth Edition, 2007
Prentice Hall

▪ Tutoriais
• Componentes
• http://docs.oracle.com/javase/tutorial/uiswing/components/index.html
• Gestores de Posicionamento
• http://download.oracle.com/javase/tutorial/uiswing/layout/index.html
• Eventos
• http://download.oracle.com/javase/tutorial/uiswing/events/index.html

▪ API (Application Programming Interface)


• http://docs.oracle.com/javase/8/docs/api/index.html

Nelson Freire (ISEP–DEI-PPROG 2016/17) 382/383


Índice Remissivo
▪ Componentes Gráficos ▪ Componentes Gráficos (continuação)
▪ Controlos Básicos ▪ Contentores de Componentes Gráficos
▪ Botão de Comando ▪ Painéis
▪ JButton ▪ JLayeredPane
▪ JPanel
▪ Entrada de Texto ▪ JRootPane
▪ JTextField ▪ JScrollPane
▪ JTabbedPane
▪ Escolha de Opções
▪ JCheckBox ▪ Janelas
▪ JComboBox ▪ JFrame
▪ JRadioButton ▪ Caixas de Diálogo
▪ JList ▪ JDialog
▪ JFileChooser
▪ Menus
▪ JOptionPane
▪ JMenu
▪ JMenuBar ▪ Gestores de Posicionamento
▪ JMenuItem ▪ BorderLayout
▪ Apresentação de Informação ▪ CardLayout
▪ JLabel ▪ FlowLayout
▪ JSeparator ▪ GridLayout
▪ JTable
▪ Manipuladores de Eventos
▪ Evento Action
Nelson Freire (ISEP–DEI-PPROG 2016/17) 383/383

Você também pode gostar