383
Nelson Freire (ISEP–DEI-PPROG 2016/17) 1/383 Interfaces Gráficas Componentes Gráficos Gestores de Posicionamento Manipuladores de Eventos (Livro Big Java, Late Objects – Capítulos 10 e 11) Paradigmas da Programação PPROG

Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

Embed Size (px)

Citation preview

Page 1: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Interfaces GráficasComponentes Gráficos

Gestores de Posicionamento

Manipuladores de Eventos

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

Paradigmas da ProgramaçãoPPROG

Page 2: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 3: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 4: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

SumárioIntrodução

▪ 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

Page 5: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Interface do UtilizadorIntrodução

Aplicação

Utilizador

Interface do Utilizador (UI)

SaídaEntrada

Page 6: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Tipos de Interface do UtilizadorIntrodução

Page 7: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ GUI

▪ Constituído por objetos

▪ Por exemplo

▪ Janela

▪ Botões de comando

▪ Tipos de Objetos

▪ Componentes Gráficos

▪ Gestores de Posicionamento // Layout Managers

▪ Manipuladores de Eventos // Event Listeners

Constituição de um GUI 1/2

Botão de Comando

Janela

Introdução

Page 8: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Componentes Gráficos

▪ Objetos

▪ Com representação gráfica

▪ Para mostrar num monitor

▪ Podem interagir com o utilizador

▪ Exemplo

▪ Botões 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

Constituição de um GUI 2/2

Botão de Comando

Introdução

Page 9: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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)

Introdução

Page 10: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

▪ Fornecidos vários estilos

▪ Classes Swing

▪ package javax.swing

▪ Nome começado por J▪ Em geral

Swing

AWT

Componentes Gráficos

Gestores de PosicionamentoManipuladores de Eventos

Introdução

Page 11: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Formas

▪ Visual

▪ Programada

Construção de um GUI 1/3Introdução

Page 12: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Visual

▪ 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

Netbeans - Editor GUI

Construção de um GUI 2/3Introdução

Page 13: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Programada

▪ Escrita de código GUI

▪ Programador

▪ Precisa de conhecer código GUI

▪ Código mais simples

▪ Do que forma visual

▪ Estudada

▪ Em PPROG

Construção de um GUI 3/3Introdução

Netbeans - Editor de Código Fonte

Page 14: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 15: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesIntrodução

Page 16: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Controlos Básicos

▪ Usados principalmente na Entrada da Aplicação

▪ Para obter dados do utilizador

▪ 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

▪ Contentores de Componentes Gráficos

▪ Usados na Estrutura da Interface Gráfica

▪ Para suportar componentes gráficos

▪ Subcategorias

▪ Nível Superior

▪ Genéricos

▪ Especiais

Categorias de Componentes GráficosComponentesIntrodução

Aplicação

Utilizador

Interface do Utilizador (UI)

SaídaEntrada

Page 17: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

ComponentesIntroduçã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.

Page 18: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

ComponentesIntroduçã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 stringretornada 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

Page 19: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

ComponentesIntrodução Controlos Básicos 3/3

Componente Classe Interesse Representação Gráfica

Campo de Texto

JTextField Introduzir pequena quantidade

de texto.

Campo de

Password

JPasswordButton Introduzir pequena quantidade

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.

Page 20: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Informação pode ser modificada por utilizador

ComponentesIntrodução

Componente Classe Interesse

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

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

Page 21: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

ComponentesIntrodução

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.

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

Page 22: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

ComponentesIntrodução

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.

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

Page 23: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Informação

▪ Não pode ser alterada pelo utilizador

▪ Interesse Geral

▪ Apenas informar o utilizador

▪ Tipos

ComponentesIntrodução

Componente Classe Interesse Representação Gráfica

Label JLabel Mostrar imagem e/ou texto não

editável.

Barra de

Progresso

JProgressBar Mostrar graficamente a quantidade de

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.

Apresentação de Informação: Não-Editável

Page 24: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse Geral

▪ Servirem de estrutura da GUI

▪ Para suportar componentes gráficos

▪ Subcategorias

▪ Nível superior

▪ Genérico

▪ Especial

Contentores 1/4Componentes

Introdução

Page 25: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Nível Superior

▪ Não podem ser incluídos noutros componentes gráficos

▪ Qualquer aplicação

▪ Usa pelo menos um componente deste tipo

▪ Tipos

Contentores 2/4Componentes

Introdução

JFrame

JDialog

JApplet

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.

Page 26: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Genéricos

▪ Para uso geral

▪ Tipos

Contentores 3/4Componentes

Introdução

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.

Page 27: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Especiais

▪ Para uso particular

▪ Tipos

▪ Representação Gráfica

Contentores 4/4Componentes

Introdução

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.

Page 28: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplos

▪ Java (Metal) // por omissão

▪ Windows

Java

Windows

Windows

Java

WindowsJava

Estilos dos Componentes Swing (Look and Feel) 1/2Componentes

Introdução

Page 29: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Estilos dos Componentes (Look and Feel) 2/2Componentes

Introdução

Page 30: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Java SE Development Kit 8 Demos and Samples Downloads

▪ Exemplo: SwingSet3

ComponentesIntrodução Demos

Page 31: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 32: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Hierarquia de Classes

▪ Superclasses

▪ Component

▪ Container

▪ JComponent

SumárioComponentesHierarquia

Page 33: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

AWT

Object

Container

Window

Frame

JFrame

JButtonJMenuItem

JPanel

Dialog

JDialog

JLabel

JScrollPane

JComboBox

JCheckBox

JTable

JToggleButton

JRadioButtonJMenu

JMenuBar

JTextField JTextArea

JPasswordField JFormattedTextField

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

SWING

JList

JFileChooser

JOptionPane

JSeparator

JTabbedPane

is-a

Hierarquia de Classes de Componentes GráficosHierarquia de Classes

JTextComponent

JComponent

Component

AbstractButton

Page 34: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ java.awt

▪ Declaração

public abstract class Component extends Object

implements ImageObserver, MenuContainer, Serializable { ... }

▪ Classe Abstrata

▪ Não é instanciável

▪ Topo da Hierarquia

▪ Superclasse

▪ 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

Classe Component 1/7

AWT

Object

Component

Superclasses

Page 35: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Classe Component 2/7Superclasses

Page 36: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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.

Classe Component 3/7Superclasses

Page 37: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Métodos (1/4)

▪ Relacionados com representação gráfica dos componentes

▪ Mais usados

Declaração Funcionalidade

public void setMinimumSize( Dimension minimumSize )

▪ Exemplo:

obj.setMinimumSize( new Dimension(10,30) );

Modifica o tamanho mínimo do componente;

A unidade de medida é o pixel.

public void setMaximumSize( Dimension maximumSize )

▪ Exemplo:

obj.setMaximumSize( new Dimension(20,40) );

Modifica o tamanho máximo do componente.

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 automaticamenteaumentadas se qualquer uma delas for menorque o tamanho mínimo especificado previamenteatravés do método setMinimumSize.

Classe Component 4/7Superclasses

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

JMenu JMenuItem JMenuBar

Page 38: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public void setPreferredSize( Dimension preferredSize )

▪ Exemplo:

obj.setPreferredSize(new Dimension(20,40) );

Serve para modificar o tamanho de um componente adicionado a um contentor gráfico com gestor 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;

A nova localização do canto superior esquerdo é especificadapor x e y;

A nova dimensão é especificadapor width e height.

public Dimension getSize() Retorna tamanho do componentenum objeto tipo Dimension.

Classe Component 5/7

x

y

(0,0)

Componente

Contentor

Superclasses

▪ Métodos (2/4)

JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox

JMenu JMenuItem JMenuBar BorderLayout FlowLayout

Page 39: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public void setLocation( int x, int y ) Move o componente, colocando o seu canto superior esquerdo noponto (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 )

▪ Exemplo:

obj.setFont( new Font ("Arial", Font.BOLD + Font.ITALIC, 20 ) );

Especifica a font do componente.

public void setVisible(boolean b)

▪ Exemplo:

obj.setVisible(true) ou obj.setVisible(false)

Mostra ( setVisible(true) ) ou esconde ( setVisible(false) ) componente.

public void setEnabled( boolean b )

▪ Exemplo:

obj.setEnable(true) ou obj.setEnable(false)

Desinibe ou inibe componente de responder a ações do utilizador (interação).

Classe Component 6/7Superclasses

▪ Métodos (3/4)

JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox

JMenu JMenuItem JMenuBar BorderLayout FlowLayout

Page 40: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public void setBackground( Color bg )

▪ Exemplo:

obj.setBackground(Color.RED);

Especifica a cor de fundo do componente.

public void setForeground( Color fg )

▪ Exemplos:

btnOK.setForeground( Color.RED );

lblNome.setForeground( Color.red );

Especifica a cor do conteúdo do componente.

public void revalidate( )

▪ Exemplo: painel adicionado após clique num botão

...

add(painel, BorderLayout.NORTH);

painel.revalidate(); // para visualizar o painel

Útil para visualizar a modificaçãodinâmica de um componente gráfico. Por exemplo, para ver um novo painelde componentes adicionado a umajanela, depois de acionado um botãode comando;

Revalida a hierarquia de componentesaté ao componente raíz validado maispróximo;

Classe Component 7/7Superclasses

▪ Métodos (4/4)

JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox

JMenu JMenuItem JMenuBar BorderLayout FlowLayout

Page 41: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Objetivo

▪ Tornar componentes em contentores de outros componentes gráficos

▪ Package

▪ java.awt

▪ Declaração

public class Container extends Component { ... }

▪ Classe Instanciável

▪ 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

Classe Container 1/2

AWT

Object

Container

Component

Superclasses

Page 42: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Métodos Próprios▪ Relacionados com operações típicas de contentores ▪ Mais usados

Classe Container 2/2

Declaração Funcionalidade

public Component add(Component comp)

▪ Exemplo: obj.add( new JPanel() );

Adiciona o componente especificado no final docontentor.

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 aocontentor.

public void setLayout( LayoutManager manager )

▪ Exemplo: obj.setLayout(new FlowLayout();

Altera o gestor de posicionamento.

Superclasses

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

JMenu JMenuItem JMenuBar

Page 43: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Classe JComponent 1/2

▪ Objetivo

▪ Superclasse de todos os componentes Swing

▪ Exceções

▪ Contentores de nível superior

▪ JFrame

▪ JDialog

▪ Package

▪ javax.swing

▪ Declaração

public abstract class JComponent extends Container

implements Serializable { ... }

▪ Classe Abstrata

▪ Não é instanciável

AWT

Object

Container

Window

Frame

JFrameJComponent

Component

Dialog

JDialog

SWING

Superclasses

Page 44: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

JComponent 2/2

Declaração Funcionalidade

public void setBorder(Border border)

▪ 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") );

Especifica um bordo.

public void requestFocus()

▪ Exemplos:

txtNome.requestFocus();

btnOK.requestFocus();

Pede para componenteadquirir foco de entrada (teclado).

▪ Métodos Próprios

▪ Mais usados

Superclasses

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

JMenu JMenuItem JMenuBar

Page 45: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 46: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Interface SwingConstants▪ Declaração

Interfaces

public interface SwingConstants {

public static final int CENTER = 0;public static final int TOP = 1;public static final int LEFT = 2;public static final int BOTTOM = 3;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;

}

Implementado nas Classes

▪ JLabel

▪ AbstractButton

▪ JTextField

Page 47: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Interface WindowConstants▪ Declaração

public interface WindowConstants {

public static final int DO_NOTHING_ON_CLOSE = 0;

public static final int HIDE_ON_CLOSE = 1;

public static final int DISPOSE_ON_CLOSE = 2;

public static final int EXIT_ON_CLOSE = 3;

}

Implementado nas classes

▪ JDialog

▪ JFrame

Interfaces

Page 48: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 49: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 50: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

AWT

Object

Container

Window

Frame

JFrame

JButtonJMenuItem

JPanel

Dialog

JDialog

JLabel

JScrollPane

JComboBox

JCheckBox

JTable

JToggleButton

JRadioButtonJMenu

JMenuBar

JTextField JTextArea

JPasswordField JFormattedTextField

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

SWING

JList

JFileChooser

JOptionPane

JSeparator

JTabbedPane

is-a

Hierarquia de Classes

JTextComponent

JComponent

Component

AbstractButton

Hierarquia de Classes de Contentores de Componentes Gráficos

Page 51: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 52: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Painéis Noção de Painel

Número de Cliques: 0

Flowlayout

BorderLayout

Label

Botão de Comando

Painel Gestor

Posicionamento dos Componentes do GUI (Layout)GUI

Page 53: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 54: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JPanel extends JComponent

implements Accessible { ... }

▪ Classe Instanciável

▪ Objetos são painéis

▪ Gestor de Posicionamento por Omissão

▪ FlowLayout

Classe JPanel Declaração

AWT

SWING

Object

Container

Window

JPanel Frame

JFrame

Component

JComponent

Page 55: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Construtores

Declaração Funcionalidade

public JPanel()

▪ Exemplo:

JPanel p1 = new JPanel();

Cria painel com gestor de posicionamento FlowLayout.

public JPanel( LayoutManager layout )

▪ Exemplo:

JPanel p2 = new JPanel( new BorderLayout() );

Cria painel com gestor de posicionamento layout passado por parâmetro.

Classe JPanel

Page 56: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprios

▪ Pouco usados

MétodosClasse JPanel

Page 57: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaClasse JPanel

Page 58: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 59: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Posicionar Componentes em Camadas

▪ Usa 3ª dimensão

▪ Designações

▪ Profundidade

▪ Ordem Z

▪ Representação

▪ Índice

▪ Valor Inteiro

Interesse

ZY

X

JLayeredPane

▪ Exemplo

Page 60: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JLayeredPane extends JComponent

implements Accessible { ... }

Declaração

AWT

SWING

Object

Container

Window

JLayeredPane Frame

JFrame

Component

JComponent

JLayeredPane

Page 61: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JLayeredPane()

▪ Exemplo:

JLayeredPane lp = new JLayeredPane ();

Cria painel JLayeredPane.

ConstrutoresJLayeredPane

Page 62: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprios

Métodos

Declaração Funcionalidade

public void moveToBack(Component c) Move componente c para baixo de todos os componentes da sua camadacorrente (posição -1).

public void moveToFront(Component c) Move componente c para cima de todosos componentes da sua camadacorrente (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

JLayeredPane

Page 63: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Requer▪ Especificação da camada // profundidade

▪ Em Componentes Sobrepostos▪ Componente no Topo = Componente com Maior profundidade

Adição de Componentes GráficosJLayeredPane

ZY

X

Page 64: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

CamadaJLayeredPane

Page 65: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Componente colocado por cima dos restantes componentes da mesma camada

Exemplo: Camada com Múltiplos Componentes GráficosJLayeredPane

Page 66: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Em Componentes Gráficos

▪ JFrame

▪ JDialog

Uso do JLayeredPaneJLayeredPane

Page 67: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaJLayeredPane

Page 68: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 69: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Geralmente

▪ Não é instanciada

▪ Objetos Usados nos Componentes Gráficos

▪ Janelas Internas

▪ Contentores de Nível Superior

▪ JFrame

▪ JDialog

▪ JApplet

InteresseJRootPane

Page 70: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Root Pane contém

▪ Painéis

▪ Layered Pane

▪ Content Pane

▪ Glass Pane

▪ Barra de Menus // Opcional

Estutura Interna

JFrame JDialog

JRootPane

Page 71: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse

▪ Posicionar os componentes

▪ Content Pane

▪ Barra de Menus // opcional

▪ Adicionalmente

▪ Posicionar componentes em camadas

Layered PaneJRootPane

JFrame JDialog

Page 72: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse

▪ Contentor dos componentes gráficos visíveis

▪ Excluíndo Barra de Menus

Content PaneJRootPane

JFrame JDialog

Page 73: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Glass PaneJRootPane

JFrame JDialog

Page 74: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Opcional

▪ Interesse

▪ Contentor de Menus

Barra de MenusJRootPane

JFrame JDialog

Page 75: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JRootPane extends JComponent

implements Accessible { ... }

Declaração

AWT

SWING

Object

Container

Window

JRootPane Frame

JFrame

Component

JComponent

JRootPane

Page 76: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JRootPane()

▪ Exemplo:

JRootPane rp = new JRootPane ();

Cria painel JRootPane.

ConstrutoresJRootPane

JFrame JDialog

Page 77: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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.

JRootPane

JFrame JDialog

Page 78: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Bibliografia

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

JRootPane

JFrame JDialog

Page 79: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 80: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Visualizar Componente Gráfico Grande

▪ Área visualização < Área componente

▪ Deslocando vista

▪ Vertical

▪ Horizontal

▪ Exemplos

InteresseJScrollPane

Imagemdentro de um

JScrollPane

Caixa de Listagemdentro de um

JScrollPane

JList

Page 81: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JScrollPane extends JComponent

implements ScrollPaneConstants, Accessible { ... }

Declaração

AWT

SWING

Object

Container

Window

JScrollPane Frame

JFrame

Component

JComponent

JScrollPane

JList

Page 82: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JScrollPane()

▪ Exemplo:

JScrollPane sp = new JScrollPane ();

Cria painel JScrollPane vazio, onde as barras de deslocamento vertical e horizontal surgirão apenas quando foremnecessárias.

public JScrollPane( Component view )

▪ Exemplo:

JList lstNomes = new Jlist();… JScrollPane sp = new JScrollPane ( lstNomes );

Cria painel JScrollPane que mostra o componente especificado, onde as barras de deslocamento vertical e horizontal surgirão sempre que o conteúdo do componente for maior do que a vista proporcionada.

Construtores

JList

JScrollPane

Page 83: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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.

JScrollPane

JList

Page 84: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Bibliografia

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

JScrollPane

JList

Page 85: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 86: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Tabbed Pane Introdução 1/6

Page 87: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JTabbedPane extends JComponent

implements Serializable, Accessible, SwingConstants { ... }

Object

Container

JComponent

Component

JTabbedPane

Classe JTabbedPane 2/6Tabbed Pane

Page 88: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JTabbedPane( )

▪ Exemplos:

▪ JTabbedPane tabPane = new JTabbedPane();

▪ JTabbedPane tabPaneLista = new JTabbedPane();

Constrói um tabbed pane vazio com o posicionamento dos separadores no topo.

public JTabbedPane( int tabPlacement )

▪ Exemplo:

▪ JTabbedPane tabPaneLista =

new JTabbedPane( JTabbedPane.LEFT );

Constrói um tabbed pane vazio com o posicionamento dos separadores especificado;

Opções tabPlacement:• JTabbedPane.TOP• JTabbedPane.BOTTOM• JTabbedPane.LEFT• JTabbedPane.RIGHT

public JTabbedPane( int tabPlacement, int tabLayoutPolicy )

▪ Exemplo:

▪ JTabbedPane tabPaneLista = new JTabbedPane(

JTabbedPane.LEFT,

JTabbedPane. WRAP_TAB_LAYOUT);

Constrói um tabbed pane vazio com o posicionamento dos separadores especificado, com espaço e sem espaço, para visualizar todos (tabLayoutPolicy) ;

Opções tabLayoutPolicy:• JTabbedPane. WRAP_TAB_LAYOUT• JTabbedPane. SCROLL_TAB_LAYOUT

Construtores 3/6Tabbed Pane

Page 89: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprios (1/2)

▪ Mais usados

Declaração Funcionalidade

public void addTab( String title, Component component )

▪ Exemplo:

JTabbedPane tabPane = new JTabbedPane();

tabPane.addTab( "Início", new PainelInicio() );

Adiciona ao tabbed pane um separador, sem imagem, com o título e o componente, especificados;

Este componente é visualizado quando o títulodo 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.

Métodos 4/6Tabbed Pane

Page 90: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios (2/2)

Declaração Funcionalidade

public void insertTab( String title, Icon icon, Component component,

String tip, int index )

Adiciona ao tabbed pane um separador com o título, imagem, componente e dica, especificados, na posição indicada.

public void removeTabAt( int index ) Remove do tabbed pane oseparador na posição indicada.

public void removeAll() Remove do tabbed pane todos osseparadores e respectivoscomponentes.

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 componenteespecificado.

public void setEnabledAt( int index, boolean enabled ) Inibe ou desinibe o separadorindicado.

Métodos 5/6Tabbed Pane

Page 91: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Bibliografia 6/6Tabbed Pane

Page 92: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 93: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Interesse▪ Criar Janelas de Nível Superior

▪ Sem Moldura

▪ Sem Barra de Menus

Classe Window

Page 94: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração▪ Package

▪ java.awt

▪ Declaração

public class Window extends Container implements Accessible { … }

AWT

Object

Container

Window

Component

Classe Window

Page 95: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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 janelaprincipal 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

Classe Window

Page 96: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 97: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração▪ Package

▪ java.awt

▪ Declaração

public class Frame extends Window implements MenuContainer { … }

AWT

Object

Container

Window

Frame

Component

Classe Frame

Page 98: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Métodos

Declaração Funcionalidade

public synchronized void setExtendedState( int state )

▪ Exemplo para maximizar janela:

setExtendedState(JFrame.MAXIMIZED_BOTH);

public void setUndecorated( boolean undecorated)

▪ Exemplo

Inibe/desinibe moldura da janela;

Só pode ser chamado quando a janelanão está visível.

▪ Herdados

▪ Component

▪ Container

▪ Window

▪ Próprios

▪ Mais usados

JFrame

Classe Frame

Page 99: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 100: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Criar Janelas

▪ Contentores de Componentes Gráficos

▪ Nível Superior

▪ Não pode estar dentro de outro componente

▪ Exemplo

▪ Representação Gráfica

Classe JFrame Interesse

Botões

Moldura

Ícone Barra de Título

Page 101: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JFrame extends Frame

implements WindowConstants, Accessible, RootPaneContainer { ... }

AWT

SWING

Object

Container

Window

Frame

JFrame

Component

DeclaraçãoClasse JFrame

Page 102: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Janela JFrame é constituída por

▪ Moldura

▪ Painéis // contentores de componentes GUI

Janela do tipo JFrame

Moldura

Estrutura InternaClasse JFrame

Page 103: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Janela JFrame contém

▪ Root Pane

Painéis PrópriosClasse JFrame

Page 104: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Formada pelos Componentes (Decorações)

▪ Barra de Título

▪ Botões

▪ Minimizar

▪ Maximizar

▪ Fechar

▪ Ícone

▪ Limites

▪ Desenhada

▪ Pelo sistema de janelas do sistema operativo

▪ Swing

▪ Desenha tudo ... exceto moldura

Janela do tipo JFrame

Botões

Limites

Ícone

Barra de Título

Moldura da JanelaClasse JFrame

Page 105: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Criam Janelas

▪ Invisíveis

▪ Tamanho 0

▪ Colocadas no canto superior esquerdo do ecrã

▪ ponto (0,0) do ecrã

▪ Declarações

Construtores

(0,0)

Y

X(0,0)

Sistema de Coordenadas do Ecrã

Declaração Funcionalidade

public JFrame() throws HeadlessException Cria janela sem título.

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

Classe JFrame

Page 106: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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.

Métodos 1/2Classe JFrame

Page 107: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios (2/2)

Declaração Funcionalidade

public void setDefaultCloseOperation(int operation)

▪ Exemplo:

setDefaultCloseOperation(EXIT_ON_CLOSE)

Define operação que ocorrerá, por omissão, quando utilizador inicia fecho da janela no botão close da moldura;

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.

Métodos 2/2Classe JFrame

JDialog

Page 108: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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 ();

}

}

Classe JFrame

Page 109: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Cor de fundo da Janela

▪ É do Content Pane

public class DemoJanela extends JFrame {

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();

}

}

Exemplo 2/4Classe JFrame

Page 110: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Janela sem Moldura

Exemplo 3/4

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 ();

}

}

Classe JFrame

Frame

Page 111: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

// Exemplo: Imagem de Fundo de uma Janelapublic 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 paineldouble largura = dimensaoPainel.getWidth();double altura = dimensaoPainel.getHeight();

ImageIcon i1 = new ImageIcon("isep_logo.jpg"); // imagem guardada na pasta do aplicaçãoImage 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

Exemplo 4/4Classe JFrame

Page 112: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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;

Resolução do EcrãClasse JFrame

Page 113: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

ContainerComponente adicionado à janela

Componente removido da janela

Component

Janela escondida

Janela mostrado

Janela movido

Janela redimensionado

FocusJanela adquire o foco

janela perde o foco

Key

Tecla mantida premida

Tecla libertada

Tecla premida (toque)

Mouse

Clique no rato

Rato entrou na janela

Rato saiu da janela

Botão do rato premido

Botão do rato libertado

Rato movido

Rato arrastado (premido + movido)

Roda do rato movida

Eventos 1/4Classe JFrame

Page 114: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Window

Janela abriu

Janela fechou

Janela ficou activa

Janela ficou inactiva

Janela ficou minimizada

Janela ficou restaurada (tamanho original)

Utilizador quer fechar Janela

Eventos 2/4Classe JFrame

Page 115: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Botão de Comando Eventos 3/4

private class TrataEvento extends WindowAdapter {public void windowClosing( WindowEvent e) { … } // método reescrito

}

Page 116: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Evento Window (2/2)

▪ Registo de objetos TrataEvento // objetos designados event listeners

Declaração Funcionalidade

public void addWindowListener( WindowListener l )

▪ Exemplo:

public class Janela extends JFrame {

public Janela() {

super("Demo");...addWindowListener( new TrataEvento() );

}

private class TrataEvento extends WindowAdapter {

@Override

public void windowClosing( WindowEvent e) { …

}}

}

Regista objeto para tratar evento do tipo Window.

Botão de Comando Eventos 4/4

Page 117: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaClasse JFrame

Page 118: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 119: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

AWT

Object

Container

Window

Frame

JFrame

JButtonJMenuItem

JPanel

Dialog

JDialog

JLabel

JScrollPane

JComboBox

JCheckBox

JTable

JToggleButton

JRadioButtonJMenu

JMenuBar

JTextField JTextArea

JPasswordField JFormattedTextField

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

SWING

JList

JFileChooser

JOptionPane

JSeparator

JTabbedPane

is-a

Hierarquia de Classes

JTextComponent

JComponent

Component

AbstractButton

Hierarquia de Classes de Contentores de Componentes Gráficos

Page 120: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Noção de Caixa de Diálogo

▪ Componente GUI

▪ Separado da janela da aplicação // não contido na janela

▪ Interesse

▪ Ler Dados

▪ Mostrar Informação

▪ 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

Introdução 1/4

Utilizador

Exemplos de Caixas de Diálogo

▪ Entrada

▪ Saída

Caixas de Diálogo

Page 121: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 Modeless

▪ Não bloqueia acesso do utilizador à janela pai

▪ Interesse

▪ Permitir ao utilizador a introdução de dados

na janela pai

Introdução 2/4Caixas de Diálogo

Caixa de Diálogo Modeless

Caixa de Diálogo Modal

Page 122: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Introdução 3/4Caixas de Diálogo

Page 123: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Bibliografia

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

Introdução 4/4Caixas de Diálogo

Page 124: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 125: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JOptionPane extends JComponent

implements Accessible { ... }

Classe JOptionPane

Object

Container

JComponent

Component

JOptionPane

Window

Frame

JFrame

Dialog

JDialog

JOptionPane

Page 126: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Criar Caixas de Diálogo

▪ Para diálogos com utilizador

▪ Simples

▪ Permitem

▪ Ler

▪ Mostrar

▪ Funcionamento

▪ Modal

Informação - Utilizador

InteresseJOptionPane

Page 127: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Caixa de Mensagem

(Mostrar mensagem)

Caixa de Confirmação

(Utilizador confirmar ação)

Caixa de Entrada

(Ler dados do utilizador)

Caixa de Opção

(Utilizador escolher opção▪ Opções personalizadas

▪ Podem ser objetos)

Tipos de Caixas JOptionPaneJOptionPane

▪ Componentes das Caixas

▪ Comuns

▪ Título

▪ Ícone

▪ Identifica tipo mensagem

▪ Mensagem

▪ Pode ser contentor JPanel

▪ Um ou mais botões de opção

▪ OK

▪ Yes, Cancel, No

▪ Sim, Cancelar, Não

▪ Específicos

▪ TextField // Entrada Texto

▪ ComboBox // Escolha Objetos

Page 128: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Usando Métodos de Classe (static)

▪ JOptionPane.showMessageDialog(...)

▪ JOptionPane.showInputDialog(...)

Caixa de Entrada

Caixa de Confirmação

Caixa de Opção

Caixa de Mensagem

JOptionPane

▪ JOptionPane.showConfirmDialog(...)

▪ JOptionPane.showOptionDialog(...)

Criação de Caixas JOptionPane 1/2

Page 129: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Constantes para especificar parâmetros comuns

▪ Tipos de mensagem

JOptionPane.ERROR_MESSAGE

JOptionPane.INFORMATION_MESSAGE

JOptionPane.WARNING_MESSAGE

JOptionPane.QUESTION_MESSAGE

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

▪ Valores retornados (valores inteiros)

JOptionPane.OK_OPTION

JOptionPane.CANCEL_OPTION

JOptionPane.YES_OPTION

JOptionPane.NO_OPTION

Caixa de Entrada

Caixa de Confirmação

Caixa de Mensagem

JOptionPane Criação de Caixas JOptionPane 2/2

Page 130: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

public static void showMessageDialog( Component parent, Object message, String title, int messageType)

public static void showMessageDialog( Component parent, Object message, String title,int messageType, Icon icon )

▪ Exemplo

Definição do parâmetroparent garante caixa dediálogo sobre (frente) essecomponente

JFrame janela = new JFrame("Biblioteca de Livros");…JOptionPane.showMessageDialog( janela, "Livro guardado com sucesso", “Guardar Livro",

JOptionPane.INFORMATION_MESSAGE);

Caixa de MensagemJOptionPane

Page 131: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

JOptionPane Caixa de Confirmação 1/2

Page 132: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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();

Caixa de Confirmação 2/2JOptionPane

Page 133: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Funcionalidade

▪ Mostra mensagem e um dos seguintes componentes

▪ TextField

▪ Retorna texto inserido pelo utilizador

▪ ComboBox

▪ Retorna objeto escolhido pelo utilizador

▪ Exemplos

▪ Livro, Carro, Trabalhador, etc.

▪ Objetos são fornecidos num array

▪ 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") }

Caixa de Entrada (Texto)

Caixa de Entrada (Objeto)

Caixa de Entrada 1/3JOptionPane

Page 134: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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, 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 (Texto)

Caixa de Entrada 2/3JOptionPane

Caixa de Entrada (Objeto)

Page 135: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplos

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]);

JFrame janela = new JFrame();…

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

Caixa de Entrada 3/3JOptionPane

Page 136: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

▪ 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)

Caixa de Opção

Caixa de Opção 1/2JOptionPane

Page 137: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo

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: … ;

}

Caixa de Opção

Caixa de Opção 2/2JOptionPane

Page 138: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaJOptionPane

Page 139: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 140: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Criadas

▪ Por objetos da classe JFileChooser

▪ Interesse

▪ Navegação no Sistema de Ficheiros para apoiar operações de (p.ex.):

▪ Abertura de ficheiro/pasta

▪ Gravação de ficheiros

JFileChooser Caixas de Diálogo File Chooser

Caixa open permite escolher▪ Pasta▪ Ficheiro para abrir

Processamento do ficheiro ou da pasta escolhida▪ Responsabilidade da

aplicação

Caixa save permite escolher▪ Pasta para gravar

ficheiros

Gravação de ficheiros▪ Responsabilidade da

aplicação

Page 141: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Modal

▪ Bloqueia acesso do utilizador à janela pai // janela criadora da caixa

▪ Obriga utilizador a interagir com caixa

▪ Para regressar à janela pai da caixa

Funcionamento das Caixas de Diálogo File Chooser

Janela Pai inacessível

ao utilizador

Caixa de Diálogo Modal

JFileChooser

Page 142: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Tipos de Caixas de Diálogo File ChooserJFileChooser

Page 143: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JFileChooser extends JComponent

implements Accessible { ... }

Declaração da Classe JFileChooserJFileChooser

Object

Container

JComponent

Component

JFileChooser

Window

Frame

JFrame

Dialog

JDialog

Page 144: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Mais usados

Declaração Funcionalidade

public JFileChooser()

▪ Exemplo:

JFileChooser fc = new JFileChooser();

Constrói objeto JFileChooser usando a pasta do utilizador, por omissão.

Esta pasta depende do sistema operativo:▪ Windows: "Meus Documentos"▪ Unix: "Home"

public JFileChooser(String currentDirectoryPath)

▪ Exemplo:

JFileChooser fc = new JFileChooser("c:/MeuProjeto");

Constrói objeto JFileChooser usando a pasta especificada através de uma string.

Parâmetro null especifica pasta do utilizador por omissão.

public JFileChooser(File currentDirectory)

▪ Exemplo:

File f = new File("c:/MeuProjeto");

JFileChooser fc = new JFileChooser( f );

Constrói objecto JFileChooser usando a pasta especificada através de objeto File.

Parâmetro null especifica pasta do utilizador por omissão.

ConstrutoresJFileChooser

Page 145: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

JFileChooser Métodos 1/6

Page 146: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios – Mostrar Caixa de Diálogo

JFileChooser Métodos 2/6

Declaração Funcionalidade

public int showOpenDialog(Component parent)

▪ Exemplo:

JFileChooser fc = new JFileChooser();

int resp = fc.showOpenDialog(this); // this=janela pai

if( resp == JFileChooser.APPROVE_OPTION) ....

Mostra caixa de diálogo JFileChooserpara abrir um ficheiro.

Valores de retorno (tipo int):

▪ JFileChooser.APPROVE_OPTION

▪ JFileChooser.CANCEL_OPTION

▪ JFileChooser.ERROR_OPTION

public int showSaveDialog(Component parent)

▪ Exemplo:

JFileChooser fc = new JFileChooser();

int resp = fc.showSaveDialog(this); // this=janela pai

if( resp == JFileChooser.APPROVE_OPTION) ....

Mostra caixa de diálogo JFileChooserpara gravar ficheiro.

Valores de retorno (tipo int):

▪ JFileChooser.APPROVE_OPTION

▪ JFileChooser.CANCEL_OPTION

▪ JFileChooser.ERROR_OPTION

public int showDialog(Component parent, String approveButtonText)

▪ Exemplo:

JFileChooser fc = new JFileChooser();

int resp = fc.showDialog(this, "Anexar");

if( resp == JFileChooser.APPROVE_OPTION)

....

Mostra caixa JFileChooser com título e botão approve personalizados.

Valores de retorno (tipo int):

▪ JFileChooser.APPROVE_OPTION

▪ JFileChooser.CANCEL_OPTION

▪ JFileChooser.ERROR_OPTION

Page 147: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios (mais usados)

▪ Para obter:▪ Ficheiro/Pasta (Diretório) selecionado pelo utilizador

Declaração Funcionalidade

public File getSelectedFile()

▪ Exemplo:

JFileChooser fc = new JFileChooser();

int resp = fc.showOpenDialog( this ); // this=janela pai

if( resp == JFileChooser.APPROVE_OPTION)

File f = fc.getSelectedFile();

...

Retorna objeto File que descreve o ficheiro selecionado.

JFileChooser Métodos 3/6

Page 148: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

▪ Exemplo:

JFileChooser fc = new JFileChooser();

fc. setFileSelectionMode( JFileChooser.FILES_ONLY );

Especifica os tipos de ficheiros que podemser selecionados.

Tipos de Ficheiros:

▪ JFileChooser.DIRECTORIES_ONLY

▪ JFileChooser.FILES_ONLY

▪ JFileChooser.FILES_AND_DIRECTORIES

Por omissão:

▪ JFileChooser.FILES_AND_DIRECTORIES

public void setFileHidingEnabled( boolean b )

▪ Exemplo:

JFileChooser fc = new JFileChooser();

fc.setFileHidingEnabled( false ); /* mostrar ficheiros escondidos */

Especifica se os ficheiros escondidos devemser visualizados.

b = false: ▪ Para visualizar ficheiros escondidos.

Por omissão:▪ Ficheiros escondidos não visualizados

JFileChooser Métodos 4/6

Page 149: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

▪ FileFilter

public abstract class FileFilter {

// Indica se o ficheiro f é aceite pelo filtro.public abstract boolean accept( File f );

// Retorna descrição do filtro. Exemplo: "*.bin"

public abstract String getDescription();}

▪ Exemplo

Define o filtro de ficheiros atual.

O filtro de ficheiros é usado na vista do utilizador.

Exemplo:

JFileChooser Métodos 5/6

Page 150: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

▪ Exemplo:

JFileChooser fc = new JFileChooser();

fc. setAcceptAllFileFilterUsed( false );

Especifica se o filtro "All Files" ("Todos os Ficheiros") é opçãodisponível na lista de filtros.

Este filtro é disponibilizado poromissão.

public void addChoosableFileFilter( FileFilter filter )

▪ Exemplo:

JFileChooser fc = new JFileChooser();

MyFileFilter filtroPDF = new MyFileFilter("pdf");

MyFileFilter filtroTXT = new MyFileFilter("txt");

fc.addChoosableFileFilter( filtroPDF );

fc.addChoosableFileFilter( filtroTXT );

Adiciona um filtro à lista de filtrosde ficheiros.

Exemplo:

JFileChooser Métodos 6/6

MyFileFilterextendsFileFilter

Page 151: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Personalizar em Português Caixas de Diálogo File ChooserJFileChooser

Page 152: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Ficheiro de Texto

▪ Lido para área de texto // JTextArea

JFileChooser Exemplo: Abertura de Ficheiro 1/2

Page 153: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

JFileChooser Exemplo: Abertura de Ficheiro 2/2

Page 154: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

JFileChooser Exemplo: Gravação de Ficheiro

Page 155: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo – Filtrar Diretórios e Ficheiros *.txt (usando objeto FileFilter)

JFileChooser

Por omissão▪ Uma file chooser lista

todos os diretórios e ficheiros não escondidos

Filtrar Lista de Diretórios e Ficheiros 1/2

Page 156: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo – Adicionar Múltiplos Filtros

JFileChooser Filtrar Lista de Diretórios e Ficheiros 2/2

Page 157: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

JFileChooser Mostrar Diálogos Abrir e Guardar com um só Objeto JFileChooser

Page 158: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaJFileChooser

Page 159: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 160: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração▪ Package

▪ java.awt

▪ Declaração

public class Dialog extends Window { … }

Classe Dialog

AWT

SWING

Object

Container

Window

JOptionPane Dialog

JDialog

Component

JComponent

Page 161: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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 oufalse=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 semtítulo, com janela pai e tipo de funcionamento (true=modal oufalse=modeless) especificados.

ConstrutoresClasse Dialog

Page 162: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Métodos▪ Herdados

▪ Component

▪ Container

▪ Window

▪ Próprios

Declaração Funcionalidade

public void setBackground(Color bgColor)

▪ Exemplo:

getContentPane().setBackground(Color.RED);

Especifica cor de fundo da caixa de diálogo.

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.

Classe Dialog

Page 163: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioContentores

Page 164: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Criar Caixas de Diálogo Próprias

▪ Para diálogos

▪ Personalizados

▪ Mais complexos

▪ Tipo

▪ Modal

▪ Modeless

▪ Exemplo

InteresseClasse JDialog

Page 165: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Semelhante à da JFrame

▪ Contém

▪ Root Pane

Estrutura InternaClasse JDialog

Page 166: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração▪ Package

▪ javax.swing

▪ Declaração

public class JDialog extends Dialog

implements WindowConstants, Accessible, RootPaneContainer, TransferHandler.HasGetTransferHandler { … }

AWT

SWING

Object

Container

Window

JOptionPane Dialog

JDialog

Component

JComponent

Classe JDialog

Page 167: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Mais Usados

ConstrutoresClasse JDialog

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 oufalse=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 semtítulo, com janela pai e tipo de funcionamento (true=modal oufalse=modeless) especificados.

Page 168: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Métodos▪ Herdados

▪ Component

▪ Container

▪ Window

▪ Dialog

▪ Próprios

Declaração Funcionalidade

public void setLayout(LayoutManager manager)Especifica o gestor de posicionamento do 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.

Classe JDialog

Page 169: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Declaração Funcionalidade

public void setDefaultCloseOperation(int operation)

▪ Exemplo:

setDefaultCloseOperation(DO_NOTHING_ON_CLOSE)

Especifica operação que ocorrerá, por omissão, quando utilizador inicia fecho da caixa de diálogo (botão close da moldura);

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.

Classe JDialog

Page 170: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento

1. Criar nova classe derivada da classe JDialog

Implementação de Caixa de Diálogo 1/10Classe JDialog

Page 171: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Implementação de Caixa de Diálogo 2/10Classe JDialog

Page 172: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Implementação de Caixa de Diálogo 3/10Classe JDialog

Page 173: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento

4. Definir a localização da caixa de diálogo

▪ Relativa à janela pai

Implementação de Caixa de Diálogo 4/10Classe JDialog

Page 174: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento

5. Tornar a caixa de diálogo visível

Implementação de Caixa de Diálogo 5/10Classe JDialog

Page 175: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento6. Adicionar componentes gráficos à caixa de diálogo (1/3)

Implementação de Caixa de Diálogo 6/10Classe JDialog

Page 176: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento6. Adicionar componentes GUI à caixa de diálogo (2/3)

Implementação de Caixa de Diálogo 7/10Classe JDialog

Page 177: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento6. Adicionar componentes GUI à caixa de diálogo (3/3)

Implementação de Caixa de Diálogo 8/10Classe JDialog

Page 178: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento7. Criar e registar objetos para tratarem os eventos gerados

pelos botões de comando da caixa de diálogo (1/2)

Implementação de Caixa de Diálogo 9/10Classe JDialog

Page 179: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento7. Criar e registar objetos para tratarem os eventos gerados

pelos botões de comando da caixa de diálogo (2/2)

Implementação de Caixa de Diálogo 10/10Classe JDialog

Transferência de Dados

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

Page 180: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 181: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Apresentação de Informação

▪ Classe JLabel

▪ Classe JSeparator

▪ Classe JTable

SumárioComponentesInformação

Page 182: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

AWT

Object

Container

Window

Frame

JFrame

JButtonJMenuItem

JPanel

Dialog

JDialog

JLabel

JScrollPane

JComboBox

JCheckBox

JTable

JToggleButton

JRadioButtonJMenu

JMenuBar

JTextField JTextArea

JPasswordField JFormattedTextField

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

SWING

JList

JFileChooser

JOptionPane

JSeparator

JTabbedPane

is-a

Hierarquia de Classes

JTextComponent

JComponent

Component

AbstractButton

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

Page 183: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Apresentação Não-Editável

▪ Texto

▪ Simples

▪ Formatado (HTML)

▪ Imagem

▪ Texto e Imagem

InteresseClasse JLabel

// JLabel c/ Bordo

// Linha de Texto

Page 184: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JLabel extends JComponentimplements SwingConstants, Accessible { ... }

Declaração

Object

Container

JLabel

JComponent

Component

Classe JLabel

Page 185: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JLabel()

▪ Exemplo

JLabel lbl = new JLabel();

Cria objeto JLabel sem imagem e sem texto.

public JLabel(String text)

▪ Exemplo Texto Simples

JLabel lblAguia = new JLabel("Águia");

▪ Exemplo Texto Formatado

String texto = "<html>As aves de rapina são aves carnívoras que compartilham "+" <P> características semelhantes, bicos recurvados e " +" <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" ) );

Cria objeto JLabel com texto especificado, alinhado à esquerda e centrado na vertical.

Construtores 1/2Classe JLabel

Page 186: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JLabel( String text, int horizontalAlignment )

▪ Exemplos:

JLabel lblAguia = new JLabel( "Águia", SwingConstants.RIGHT );

JLabel lblAguia = new JLabel("Águia", JLabel.RIGHT );

Cria objeto JLabel com texto especificado, centrado na vertical ecom alinhamento horizontal especificado.

public JLabel( Icon image )

▪ Exemplo:

JLabel lblAguia = new JLabel( new ImageIcon("aguia.jpg") );

Cria objeto JLabel com imagem especificada, centrada na vertical e horizontal.

public JLabel( Icon image, int horizontalAlignment )

▪ Exemplo:

JLabel lblAguia = new JLabel( new ImageIcon("aguia.jpg"), JLabel.LEFT);

Cria objeto JLabel com imagem especificada,centrada na vertical e 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.

Construtores 2/2Classe JLabel

Page 187: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprios (1/2)

Métodos 1/2

Declaração Funcionalidade

public void setText(String text)

▪ Ex: JLabel lblAguia = new JLabel();

lbl.setText("Águia");

Especifica texto.

public String getText()

▪ Ex: String texto = lbl.getText();

Retorna texto.

public void setIcon( Icon defaultIcon )

▪ Ex: lbl.setIcon(new ImageIcon("aguia.jpg") );

Especifica imagem.

public void setIconTextGap(int iconTextGap)

▪ Ex: lbl.setIconTextGap( 10 );

Especifica intervalo entre texto e imagem.

Classe JLabel

Page 188: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios (2/2)

Métodos 2/2

Declaração Funcionalidade

public void setVerticalAlignment( int alignment )

▪ Exemplo 1:

JLabel lblAguia = new JLabel("Águia");

lblAguia.setVerticalAlignment( SwingConstants.TOP);

▪ Exemplo 2:

JLabel lblAguia = new JLabel("Águia");

lblAguia.setVerticalAlignment( JLabel.TOP );

Especifica alinhamento vertical do texto e imagem;

Opções de alinhamento:▪ SwingConstants.CENTER▪ SwingConstants.TOP▪ SwingConstants.BOTTOM

▪ JLabel.CENTER▪ JLabel.TOP▪ JLabel.BOTTOM

public void setHorizontalAlignment( int alignment )

▪ Exemplo 1:

JLabel lblAguia = new JLabel("Águia");

lblAguia.setHorizontalAlignment( SwingConstants.LEFT );

▪ Exemplo 2:

JLabel lblAguia = new JLabel("Águia");

lblAguia.setHorizontalAlignment( JLabel.LEFT );

Especifica alinhamento horizontal do texto e imagem;

Opções de alinhamento:▪ SwingConstants.CENTER▪ SwingConstants.RIGHT▪ SwingConstants.LEFT

▪ JLabel.CENTER▪ JLabel.RIGHT▪ JLabel.LEFT

Classe JLabel

Page 189: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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");

setDefaultCloseOperation( EXIT_ON_CLOSE );

setSize(JANELA_LARGURA, JANELA_ALTURA);

setLocationRelativeTo(null);

setVisible(true);}

}

▪ Código Incompleto

▪ Código mais Completo

Classe JLabel

Page 190: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Classe JLabel Eventos 1/2

Tipos de Evento que label pode Gerar Evento

ContainerComponente adicionado à label

Componente removido da label

Component

Label escondida

Label mostrada

Label movida

Label redimensionada

FocusLabel adquire o foco de entrada

Label perde o foco de entrada

Key

Tecla mantida premida

Tecla libertada

Tecla premida (toque)

Mouse

Clique no rato

Rato entrou na label

Rato saiu da label

Botão do rato premido

Botão do rato libertado

Rato movido

Rato arrastado (premido + movido)

Roda do rato movida

Page 191: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

▪ Exemplo:

JLabel lbl = new JLabel("Águia");

// Classe TrataEvento implementa interface MouseListener

TrataEvento t = new TrataEvento();

lbl.addMouseListener( t );

Regista objeto para tratar evento do tipo Mouse.

Classe JLabel Eventos 2/2

Page 192: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaClasse JLabel

Page 193: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Apresentação de Informação

▪ Classe JLabel

▪ Classe JSeparator

▪ Classe JTable

SumárioComponentesInformação

Page 194: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

InteresseClasse JSeparator

Page 195: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JSeparator extends JComponentimplements SwingConstants, Accessible { ... }

Declaração

Object

Container

JSeparator

JComponent

Component

Classe JSeparator

Page 196: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JSeparator()

▪ Exemplo:

JSeparator sp1 = new JSeparator ();

Cria separador horizontal.

public JSeparator( int orientation )

▪ Exemplos:

JSeparator sp1 = new JSeparator (JSeparator.VERTICAL);

Ex: JSeparator sp2 = new JSeparator (JSeparator.HORIZONTAL);

Cria separador horizontal ou vertical.

ConstrutoresClasse JSeparator

Page 197: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprio

▪ Mais usado

Métodos

Declaração Funcionalidade

public void setOrientation( int orientation )

▪ Exemplo

JSeparator sp1 = new JSeparator ();

sp1.setOrientation( JSeparator.VERTICAL );

Especifica orientação.

Classe JSeparator

Page 198: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaClasse JSeparator

Page 199: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Apresentação de Informação

▪ Classe JLabel

▪ Classe JSeparator

▪ Classe JTable

SumárioComponentesInformação

Page 200: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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.

▪ Opcionalmente

▪ Dados

▪ Podem ser editados … pelo utilizador.

▪ Tabela Mostrada

▪ Dentro de um “Scroll Pane” // “Scroll Pane” serve de contentor de JTable

IntroduçãoTabela

Cabeçalho

ColunaCélula

Page 201: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ MVC (Model-View-Controller)

▪ Padrão de arquitetura de software

▪ Tabela constituída por 3 componentes:

▪ 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.

▪ Responsável pela Vista da Tabela (lógica da UI)▪ Implementada por objeto JTable

▪ Responsável pelo Modelo da Tabela (lógica do negócio)▪ Implementado por objeto TableModel

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

Tabela =

objeto JTable+

objeto TableModel

View

Controller

Model

Arquitetura 1/2Tabela

Page 202: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo

Coleção de Objetos

ObjetoTableModel

Objeto JTable

TableModelé uma

interface

Arquitetura 2/2Tabela

Page 203: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JTable extends JComponent

implements TableModelListener, Scrollable, TableColumnModelListener,

ListSelectionListener, CellEditorListener, Accessible, RowSorterListener { ... }

Object

Container

JComponent

Component

JTable

Classe JTable 1/5Tabela

Page 204: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JTable(TableModel dm)

▪ Exemplo:

DefaultTableModel modelo = new DefaultTableModel();

JTable table = new JTable( modelo );

JScrollPane scrPane = new JScrollPane(table); // contentor da tabela

Cria um objeto JTable inicializado com o modelo de dados dm.

▪ Construtor

▪ Para usar modelos de dados

Classe JTable 2/5Tabela

Page 205: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public TableModel getModel()

▪ Exemplo:

DefaultTableModel modelo = new DefaultTableModel();

JTable table = new JTable( modelo );

JScrollPane scrPane = new JScrollPane(table); …

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

DefaultTableModel modelo = (DefaultTableModel) table.getModel();

Retorna o modelo de dados que fornece os dados visualizados por este objeto JTable.

public void setFillsViewportHeight(boolean fillsViewportHeight)

▪ Exemplo:

DefaultTableModel modelo = new DefaultTableModel();

JTable table = new JTable( modelo );

table. setFillsViewportHeight(true);

JScrollPane scrPane = new JScrollPane(table);

▪ Especifica a propriedade setFillsViewportHeight

▪ True significa que a tabela usa toda a altura do seu contentor, mesmo que não tenha um nº de linhas suficiente para usar todo o espaço vertical do contentor.

▪ Métodos (mais usados) (1/3)

Classe JTable 3/5Tabela

Page 206: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public void setSelectionMode(int selectionMode)

▪ Exemplo:

DefaultTableModel modelo = new DefaultTableModel();

JTable table = new JTable( modelo );

table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

JScrollPane scrPane = new JScrollPane(table); …

Especifica o modo de seleção da tabela (linhas e colunas) para permitir:▪ Seleção simples▪ Seleção de um intervalo

simples▪ Seleção de múltiplos

intervalosParâmetros:▪ ListSelectionModel.SINGLE_SELE

CTION▪ ListSelectionModel.SINGLE_INTE

RVAL_SELECTION▪ ListSelectionModel.MULTIPLE_IN

TERVAL_SELECTION

public void clearSelection()

▪ Exemplo:…

JTable table = new JTable( modelo );…table.clearSelection();

Desseleciona todas as linhas e colunas selecionadas.

▪ Métodos (mais usados) (2/3)

Classe JTable 4/5Tabela

Page 207: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public void setAutoCreateRowSorter(boolean autoCreateRowSorter)

▪ Exemplo:

DefaultTableModel modelo = new DefaultTableModel();

JTable table = new JTable( modelo );…table.setAutoCreateRowSorter(true); // ativa ordenação das linhas

Especifica se a tabela pode criar automaticamente um objeto TableRowSortersempre que o modelo se modificar.

Esta funcionalidade permite a ordenação das linhas da tabela, através de um clique sobre o cabeçalho de uma coluna da tabela.

▪ Métodos (mais usados) (3/3)

Classe JTable 5/5Tabela

Page 208: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interface TableModel (1/2)

Modelos de Dados 1/5Tabela

Page 209: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interface TableModel (2/2)

Modelos de Dados 2/5

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, setValueAtsobre 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, intcolumnIndex);

Especifica o valor da célula especificada como aValue.

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.

Tabela

Page 210: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe AbstractTableModel (1/3)

▪ Implementa a interface TableModel

▪ Métodos implementados:

Modelos de Dados 3/5

Métodos não implementados Implementar em subclasses instanciáveis

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

Tabela

Page 211: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe AbstractTableModel (2/3)

▪ Subclasse instanciável

▪ Obrigada a implementar apenas os seguintes métodos

Modelos de Dados 4/5Tabela

Page 212: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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.

public void fireTableDataChanged()Atualização de todos os dados da tabela(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.

public void fireTableStructureChanged()Atualização da estrutura da tabela.Modificação do número de colunas, nomes e tipo de dados das colunas.

Modelos de Dados 5/5Tabela

Page 213: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Modelo da Tabela

▪ Gera eventos

▪ Quando os dados/estrutura da tabela

são modificados

▪ Eventos

▪ Tipo TableModelEvent

▪ Eventos enviados a objetos trata evento

▪ Tipo TableModelListener

▪ Registados no modelo da tabela

▪ Tipo TableModelListener

▪ Definido por interface

▪ Declaração

▪ Objeto Trata Evento TableModel

▪ Instância de classe que implementa a interface TableModelListener

▪ Implementa o método tableChanged

Eventos do Modelo da Tabela 7/8

public interface TableModelListener extends java.util.EventListener{

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

}

Objeto TableModel

ObjetoTableModelListener

ObjetoTableModelListener

ObjetoTableModelListener

Evento TableModel

Tabela

Page 214: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Método tableChanged

▪ 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

Eventos do Modelo da Tabela 8/8

public interface TableModelListener extends java.util.EventListener {

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

}

Tabela

Page 215: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Modelos de Dados 1/6Tabela

Page 216: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Internet

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

BibliografiaTabela

Page 217: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 218: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 219: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

AWT

Object

Container

Window

Frame

JFrame

JButtonJMenuItem

JPanel

Dialog

JDialog

JLabel JScrollPane

JComboBox

JCheckBox

JTable

JToggleButton

JRadioButtonJMenu

JMenuBar

JTextFieldJTextArea

JPasswordField JFormattedTextField

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

SWING

JList

JFileChooser

JOptionPane

JSeparator

is-a

Hierarquia de Classes de Controlos BásicosHierarquia de Classes

JTextComponent

JComponent

Component

AbstractButton

Page 220: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Classe AbstractButton 1/4

▪ Package

▪ javax.swing

▪ Declaração

public abstract class AbstractButton extends JComponent

implements ItemSelectable, SwingConstants { ... }

Object

Container

JComponent

AbstractButton

Component

Superclasses

Page 221: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Classe AbstractButton 2/4

Declaração Funcionalidade

public void setMnemonic(char mnemonic)

▪ Exemplo:

btnCancelar.setMnemonic(KeyEvent.VK_C) ; // ALT + c

Especifica tecla de atalho

public void setDisplayedMnemonicIndex(int index)

▪ Exemplo:

btnCancelar.setDisplayedMnemonicIndex (0) ; // ALT + c

Especifica tecla de atalho

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 )

▪ Exemplos:

Especifica alinhamento horizontal do texto e ícone;

Opções de alinhamento:▪ SwingConstants.CENTER (por omissão) ▪ SwingConstants.RIGHT▪ SwingConstants.LEFT

Superclasses

JButton JMenu JMenuItem JCheckBox JRadioButton

Page 222: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Classe AbstractButton 3/4

Declaração Funcionalidade

public void setVerticalTextPosition( int textPosition )

▪ Exemplos:

Especifica a posição vertical do texto relativamente ao ícone;

Opções:

▪ SwingConstants.CENTER (por omissão)

▪ SwingConstants.TOP

▪ SwingConstants.BOTTOM

public void setHorizontalTextPosition( int textPosition )

▪ Exemplos:

Especifica a posição horizontal do texto relativamente ao ícone;

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.

Superclasses

JButton JMenu JMenuItem JCheckBox JRadioButton

Page 223: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Classe AbstractButton 4/4

Declaração Funcionalidade

public void setIcon( Icon defaultIcon ) Especifica o ícone.

public void setDisabledIcon( Icon disabledIcon )

▪ Exemplo:

btn.setDisabledIcon ( new ImageIcon("c:\\x.gif") );

Especifica ícone para botão inibido.

public void setRolloverIcon( Icon rolloverIcon )

▪ Exemplo:

btn.setRolloverIcon( new ImageIcon("c:\\tips.gif") );

Especifica novo ícone à passagem do apontador do rato.

public void setIconTextGap( int iconTextGap )

▪ Exemplo:

Especifica intervalo entre texto e ícone.

Superclasses

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

JButton JMenu JMenuItem JCheckBox JRadioButton

Page 224: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Classe JToggleButton 1/4

▪ Package

▪ javax.swing

▪ Declaração

public abstract class JToggleButton extends AbstractButton

implements Accessible { ... }

Object

Container

JToggleButton

JComponent

AbstractButton

Component

Superclasses

Page 225: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse

▪ Implementação de botões de dois estados

▪ Selecionado

▪ Desselecionado

▪ Herdada pelas classes

▪ JCheckBox

▪ JRadioButton

JCheckBox JRadioButton

Classe JToggleButton 2/4Superclasses

Page 226: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Construtores

Declaração Funcionalidade

public JToggleButton()

▪ Exemplo:

JToggleButton tbt1 = new JToggleButton();

Cria botão visível e vazio.

public JToggleButton( String text )

▪ Exemplo:

JToggleButton tbtCancelar = new JToggleButton("Cancelar");

Cria botão visível com texto.

public JToggleButton( Icon icon )

▪ Exemplo:

JToggleButton tbtCancelar = new JToggleButton( new ImageIcon("x.gif"));

Cria botão visível com ícone.

public JButton( String text, Icon icon )

▪ Exemplo:

Icon icon = new ImageIcon("x.gif");

JToggleButton tbtCancelar = new JToggleButton("Cancelar", icon );

Cria botão visível com ícone e texto.

Classe JToggleButton 3/4Superclasses

Page 227: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Bibliografia

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

JCheckBox JRadioButton

Classe JToggleButton 4/4Superclasses

Page 228: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 229: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Permitir ao Utilizador

▪ Ordenar execução de comando (i.e.,ação)

InteresseBotão de Comando

Page 230: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JButton extends AbstractButton

implements Accessible { ... }

DeclaraçãoBotão de Comando

Object

Container

JButton

JComponent

AbstractButton

Component

Page 231: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Construtores

▪ Por omissão▪ Botão é visível

Classe JButton

Declaração Funcionalidade

public JButton()

▪ Exemplo:

JButton btnCancelar = new JButton();

Cria objeto JButton visível vazio.

public JButton( String text )

▪ Exemplo:

JButton btnCancelar = new JButton("Cancelar");

Cria objeto JButton visível com texto.

public JButton( Icon icon )

▪ Exemplo:

JButton btnCancelar = new JButton(new ImageIcon("x.gif"));

Cria objeto JButton visível com ícone.

public JButton( String text, Icon icon )

▪ Exemplo:

JButton btnCancelar = new JButton("Cancelar", new ImageIcon("x.gif"));

Cria objeto JButton visível com ícone e texto.

Botão de Comando

Page 232: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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.

Classe JButtonBotão de Comando

Page 233: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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");

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");

}}

Classe JButtonBotão de Comando

▪ Código Incompleto

▪ Código Completo

Page 234: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Botão de Comando

Tipos de Evento que Botão pode Gerar Evento

Action Clique no botão

ContainerComponente adicionado ao botão

Componente removido do botão

Component

Botão escondido

Botão mostrado

Botão movido

Botão redimensionado

FocusBotão adquire o foco

Botão perde o foco

Key

Tecla mantida premida

Tecla libertada

Tecla premida (toque)

Mouse

Clique no rato

Rato entrou no botão

Rato saiu do botão

Botão do rato premido

Botão do rato libertado

Rato movido

Rato arrastado (premido + movido)

Roda do rato movida

Eventos 1/2

Page 235: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

▪ Exemplo:

JButton btn = new JButton("Cancelar");

// Classe TrataEvento implementa interface ActionListener

TrataEvento t = new TrataEvento();

btn.addActionListener( t );

Regista objeto para tratar evento do tipo Action.

Botão de Comando Eventos 2/2

Page 236: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaBotão de Comando

Page 237: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 238: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Permitem ao utilizador da aplicação

▪ Introdução de texto

▪ Edição de texto

▪ Tipos de Componentes Swing

▪ JTextField

▪ Aceita uma só linha de texto

▪ JTextArea

▪ Pode aceitar múltiplas linhas de texto

▪ JPasswordField

▪ Aceita só uma linha de texto

▪ Esconde texto introduzido

▪ JFormattedTextField

▪ Para entradas específicas

▪ Exemplos ▪ Datas e Endereços IP

▪ Herdam Classe JTextComponent

▪ Classe abstrata

▪ Não instanciável

Componentes de Entrada de Texto

Object

Container

Window

Frame

JFrame

JComponent

Component

JTextComponent

JTextFieldJTextArea

JPasswordField JFormattedTextField

Entrada de Texto

Page 239: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe base de componentes swing de texto

▪ Caraterísticas comuns

InteresseJTextComponent

Object

Container

Window

Frame

JFrame

JComponent

Component

JTextComponent

JTextFieldJTextArea

JPasswordField JFormattedTextField

Page 240: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing.text

▪ Declaração

public abstract class JTextComponent extends JComponent

implements Scrollable, Accessible { ... }

▪ Classe Abstrata

▪ Não Instanciável

DeclaraçãoJTextComponent

Object

Container

JComponent

JTextComponent

Component

Page 241: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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.

MétodosJTextComponent

JTextField

Page 242: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Entrada de Texto Simples

▪ Linha de texto

▪ Exemplo

InteresseJTextField

Page 243: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JTextField extends JTextComponent

implements SwingConstants { ... }

DeclaraçãoJTextField

Object

Container

JComponent

JTextComponent

Component

JTextField

Page 244: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JTextField( )

▪ Exemplo:

JTextField txtNome = new JTextField();

Cria campo de texto vazio e com nº de colunas 0 (tamanho nulo).

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.

ConstrutoresJTextField

Page 245: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

MétodosJTextField

Page 246: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

JTextField

Tipos de Evento que Campo de Texto pode Gerar Evento

Action Terminada edição (tecla ENTER premida)

ContainerComponente adicionado ao campo de texto

Componente removido do campo de texto

Component

Campo de texto escondido

Campo de texto mostrado

Campo de texto movido

Campo de texto redimensionado

FocusCampo de texto adquire o foco de entrada

Campo de texto perde o foco de entrada

Key

Tecla mantida premida

Tecla libertada

Tecla premida (toque)

Mouse

Clique no rato

Rato entrou no campo de texto

Rato saiu do campo de texto

Botão do rato premido

Botão do rato libertado

Rato movido

Rato arrastado (premido + movido)

Roda do rato movida

Text Texto alterado

Eventos 1/2

Page 247: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 )

▪ Exemplo:

JTextField txt = new JTextField( 10 );

// Classe TrataEvento implementa interface ActionListener

TrataEvento t = new TrataEvento();

txt.addActionListener( t );

Regista objeto para tratar evento do tipo Action.

JTextField Eventos 2/2

Page 248: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaJTextField

Page 249: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 250: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Interesse

Sistema de Menus

Menu

Barra de Menus

Page 251: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Sistema de Menus

▪ Estrutura Hierárquica

▪ Menus organizados

▪ Vários níveis

▪ Constituído

▪ Barra de Menus

▪ Contém Menus

▪ Contêm

▪ Itens de Menu

▪ Separadores

▪ Submenus

Constituição de Sistema de Menus

Separador de Itens

Item de Menu

Barra de Menus

Menu

Componentes de um Sistema de Menus

Menu

Page 252: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Barra de Menus

Colocação da Barra de Menus

Menu

Abertura de um Menu

Barra de Menus

Page 253: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Componentes para Sistema de Menus

AbstractButton

Object

Container

JComponent

Component

JMenuBarJSeparator

JButton

JCheckBox

JToggleButton

JRadioButton

JMenuItem

JMenu

Menu

Page 254: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JMenuItem extends AbstractButton

implements Accessible, MenuElement { ... }

▪ Construtores

Declaração Funcionalidade

public JMenuItem( String text )

▪ Ex: JMenuItem mitAcerca = new JMenuItem("Acerca");

Constrói item de menu com texto especificado.

public JMenuItem( String text, int mnemonic )

▪ Ex: JMenuItem mitAcerca = new JMenuItem("Acerca", 'A');

Constrói item de menu com texto e mnemónica do teclado especificados.

public JMenuItem(String text, Icon icon )

▪ Ex: Icon ic1 = new ImageIcon("acerca.jpg");

JMenuItem mitAcerca = new JMenuItem("Acerca", ic1);

Constrói item de menu com texto e ícone especificados.

public JMenuItem( )

▪ Ex: JMenuItem mitSair = new JMenuItem();

Constrói item de menu sem texto e sem ícone.

Menu Classe JMenuItem 1/2

Page 255: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Métodos

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ AbstractButton

▪ Próprios (mais usados)

Declaração Funcionalidade

public void setAccelerator(KeyStroke keyStroke)

▪ Exemplos:

JMenuItem mitAcerca = new JMenuItem("Acerca", 'A');

mitAcerca.setAccelerator( KeyStroke.getKeyStroke("ctrl A") );…mitAcerca.setAccelerator( KeyStroke.getKeyStroke("alt A") );…mitAcerca.setAccelerator( KeyStroke.getKeyStroke('A') );

Especifica o acelerador do item de menu;

Acelerador é uma tecla ou combinação de teclas que aciona o item de menu sem necessidade de navegar pelo sistema de menus.

public void setEnabled(boolean b)

▪ Ex: mitAcerca.setEnable(false);

Inibe/desinibe item de menu.

Menu Classe JMenuItem 2/2

JMenu

Page 256: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JMenu extends JMenuItem

implements Accessible, MenuElement { ... }

▪ Construtores

Declaração Funcionalidade

public JMenu( String text )

▪ Exemplo:

JMenu mnuAjuda = new JMenu("Ajuda");

Constrói menu com texto especificado

public JMenu( )

▪ Exemplo:

JMenu mitSair = new JMenu();

Constrói menu sem texto

Menu Classe JMenu 1/2

Page 257: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Métodos

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ AbstractButton

▪ JMenuItem

▪ Próprios

▪ Mais usados Declaração Funcionalidade

public JMenuItem add( JMenuItem menuItem )

▪ Exemplo:

JMenuItem mitAcerca = new JMenuItem("Acerca");

JMenu mnuAjuda = new JMenu("Ajuda");

mnuAjuda.add( mitAcerca );

Adiciona item de menu no fim domenu;

Retorna o item adicionado.

public void addSeparator()

▪ Exemplo:

mnuAjuda.addSeparator();

Adiciona separador no fim do menu.

Menu Classe JMenu 2/2

Page 258: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JMenuBar extends JComponent

implements Accessible, MenuElement { ... }

▪ Construtor

Declaração Funcionalidade

public JMenuBar( )

▪ Exemplo:

JMenuBar mb = new JMenuBar();

Constrói barra de menus.

Menu Classe JMenuBar 1/2

Page 259: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Métodos

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprio

▪ Mais usado

Menu

Declaração Funcionalidade

public JMenu add(JMenu c)

▪ Exemplo

JMenuBar mb = new JMenuBar();

JMenu mnuAjuda = new JMenu("Ajuda");

mb.add( mnuAjuda );

Insere menu especificado no fim da barra de menus.

Classe JMenuBar 2/2

Page 260: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Sistema de MenusMenu

Criado item Abrir e adicionado ao Menu Projetos, abaixo

Separador de itens

Criado submenu Grupos e adicionado no fim do MenuProjetos Submenu

Page 261: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Sistema de MenusMenu

Método de Evento Actiondo item Abrir

Método de Evento Actiondo item Fechar

Page 262: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo de Implementação (3/3)

Sistema de MenusMenu

Submenu:Menu adicionado a outro menu

Item de Submenu

Page 263: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Menus suportam Acesso pelo Teclado

▪ Aumenta acessibilidade das aplicações

▪ Tipos de Acesso pelo Teclado

▪ Mnemónicas

▪ Aceleradores

Acesso aos Menus pelo Teclado 1/5Menu

Page 264: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Mnemónicas

▪ Teclas

▪ Permitem navegar pela hierarquia de menus

▪ Identificadas

▪ Por carater sublinhado no nome

▪ Menu

▪ Item de menu

▪ Usadas

▪ Simultaneamente com tecla ALT

▪ ALT + Mnemónica

▪ Exemplos (figura)

▪ ALT + A // abre menu

▪ ALT + s // abre submenu

▪ Itens de menu

▪ Têm de estar visíveis

Acesso aos Menus pelo Teclado 2/5

Mnemónica o

Acelerador de Item

Mnemónicas e Aceleradores

Menu

Page 265: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

▪ Combinação de teclas

▪ Exemplos

▪ Alt+1 // figura

▪ CTRL+X

Acesso aos Menus pelo Teclado 3/5

Mnemónica o

Acelerador de Item

Mnemónicas e Aceleradores

Menu

Page 266: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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');

Acesso aos Menus pelo Teclado 4/5Menu

Page 267: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Acesso aos Menus pelo Teclado 5/5Menu

Page 268: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Tipos de Evento que Menu/Item podem Gerar Evento

Action Clique em menu/item

ContainerComponente adicionado a menu/item

Componente removido de menu/item

Component

Menu/item escondido

Menu/item mostrado

Menu/item movido

Menu/item redimensionado

FocusMenu/item adquire o foco

Menu/item perde o foco

Item Selecionado/desselecionado item

Key

Tecla mantida premida

Tecla libertada

Tecla premida (toque)

Mouse

Clique no rato

Rato entrou no menu/item

Rato saiu do menu/item

Botão do rato premido

Botão do rato libertado

Rato movido

Rato arrastado (premido + movido)

Roda do rato movida

Eventos 1/2Menu

Page 269: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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()

}

});

Eventos 2/2Menu

Page 270: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

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

BibliografiaMenu

Page 271: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 272: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Mostrar Lista de Elementos

▪ Para utilizador escolher

▪ Um elemento

▪ Múltiplos elementos

▪ Elementos de Lista

▪ Colocados numa simples caixa

▪ Organizados

▪ Numa coluna

▪ Múltiplas colunas

▪ Objetos arbitrários

▪ Exemplos

▪ Strings

▪ Caixas de verificação (JCheckBox)

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

▪ Caixa de Listagem

▪ Mais complexa

▪ Tem mais capacidades

InteresseCaixa de Listagem

Lista de Strings

Um elemento selecionado

Múltiplos elementos selecionados

UmaColuna

MúltiplasColunas

Combo Box

Lista de Caixas de Verificação

Page 273: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ MVC (Model-View-Controller)

▪ Interesse

▪ 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

Caixa de Listagem Arquitetura

Vista da Lista

▪ Responsável pela Vista da Lista (lógica da UI)▪ Implementada por objeto JList

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

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

Implementação de Caixa de Listagem => Objeto JList + Objeto ListModel

View

Controller

Model

Page 274: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JList<E> extends JComponent

implements Scrollable, Accessible { ... }

▪ Tipo E

▪ Especifica tipo de elemento da caixa de listagem

Object

Container

JComponent

Component

JList

Caixa de Listagem Classe JList 1/6

Page 275: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Declaração Funcionalidade

public JList( )

▪ Ex:

JList lstNomes = new JList();

lstNomes.setModel( modelo );

Constrói uma caixa de listagem com um modelo de lista (AbstractListModel):▪ Vazio▪ Apenas pode ser lido

▪ Não é possível adicionar elementos ao modelo da lista.

Interesse:▪ Especificar posteriormente o modelo de lista.

public JList(final E[] listData) Constrói uma caixa de listagem que mostra elementosdo array especificado.

Cria um modelo da lista contendo os elementos do array e que apenas pode ser lido. Não é possíveladicionar/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.

Caixa de Listagem Classe JList 2/6

▪ Construtores

▪ Mais usados

Page 276: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

JList + JScrollPane

Caixa de Listagem Classe JList 3/6

Exemplo:…

JList lstNomes = new JList (modelo);

JScrollPane scrPane = new JScrollPane( lstNomes );

add(scrPane, BorderLayout.CENTER);

Page 277: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Métodos Herdados

▪ Component

▪ Container

▪ JComponent

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

▪ Mais usados

Declaração Funcionalidade

public void setSelectionMode(int selectionMode)

▪ Exemplo

String elementos = "Ana", "Maria", "João";

JList<String> lst = new JList( elementos );

lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

Especifica modo de seleção de elementos da lista

▪ SINGLE_SELECTION

▪ SINGLE_INTERVAL_SELECTION

▪ MULTIPLE_INTERVAL_SELECTION

Caixa de Listagem Classe JList 4/6

Page 278: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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 oselementos da lista selecionados, ordenados de modo ascendente;

Retorna array vazio, sem qualquer elementoselecionado.

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 elementoselecionado.

public void setVisibleRowCount(int visibleRowCount) Especifica o nº de elementos mostrados semrecorrer ao scrolling.

Por omissão mostra 8 elementos.

Caixa de Listagem Classe JList 5/6

Page 279: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Declaração Funcionalidade

public ListModel<E> getModel()

▪ Exemplo

JList<String> lstDemo = new JList();

ListModel modeloLista = lstDemo.getModel();

Retorna o modelo da lista que guarda oselementos da lista apresentados pelocomponente JList.

public void setModel(ListModel<E> model) Especifica o modelo da lista que representa o conteúdo da lista, notifica os“property change listeners” e depoislimpa as seleções da lista.

Caixa de Listagem Classe JList 6/6

Page 280: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Construção (Objetos Modelo da Lista)

▪ Formas alternativas

▪ Classe DefaultListModel

▪ Classe AbstractListModel

▪ 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.

Caixa de Listagem Modelo da Lista 1/6

complexidade de uso … para o programador

-

+

Page 281: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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();

Caixa de Listagem Modelo de Dados 2/6

Page 282: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Caixa de Listagem Modelo de Dados 3/6

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){…}

}

Page 283: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Usando a Classe AbstractListModel (2/3)

▪ Criar subclasse … que implementa todos os métodos para gerir os elementos da lista

▪ Exemplo (1/2)

Caixa de Listagem Modelo de Dados 4/6

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

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

Page 284: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Usando a Classe AbstractListModel (3/3)

▪ Exemplo (2/2)

Caixa de Listagem Modelo de Dados 5/6

Page 285: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Usando a Interface ListModel

▪ Declaração

▪ 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

Caixa de Listagem Modelo de Dados 6/6

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);

}

Page 286: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Listagem de StringsCaixa de Listagem

ScrollPanePara visualizar toda a lista

Page 287: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaCaixa de Listagem

Page 288: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 289: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Caixa de Combinação

▪ É um componente gráfico

▪ Permite ao utilizador

▪ Selecionar uma opção

▪ Formas

▪ Não-Editável // por omissão

▪ Editável

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

▪ Combina os elementos

▪ Botão

▪ Lista

▪ Caixa de Combinação Editável

▪ Combina os elementos

▪ Campo de Texto com Botão

▪ Lista

Noção 1/2

Botão

Lista

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

(1 - Lista Escondida ; 2 - Lista Visível)

(1) (2)

Caixa de Combinação Editável

Campo de Texto com Botão

Lista

Caixa de Combinação

Page 290: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Botão (Seta)

▪ Permite ao utilizador

▪ Visualizar a Lista

▪ Lista

▪ Permite ao utilizador

▪ Selecionar uma opção

▪ Campo de Texto

▪ Permite ao utilizador

▪ Editar opção selecionada

▪ Interesse

▪ Em listas grandes

▪ Para seleção mais rápida

▪ Opção escondida

Caixa de Combinação Noção 2/2

Botão

Lista

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

(1 - Lista Escondida ; 2 - Lista Visível)

(1) (2)

Caixa de Combinação Editável

Lista

Campo de Texto com Botão

Page 291: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

InteresseCaixa de Combinação

Page 292: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Package

▪ javax.swing

▪ Declaração

public class JComboBox<E> extends JComponent

implements ItemSelectable,ListDataListener,ActionListener, Accessible { ... }

▪ Tipo E

▪ Especifica tipo de opção da caixa de combinação

Classe JComboBox

Object

Container

JComponent

Component

JComboBox

Caixa de Combinação

Page 293: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Mais usados

Declaração Funcionalidade

public JComboBox( )

▪ Exemplos

JComboBox cbMarcas = new JComboBox();

JComboBox<String> cbMarcas = new JComboBox();

Constrói caixa de combinação não-editável com uma lista de opções vazia.

public JComboBox( E[ ] items)

▪ Exemplo 1

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

JComboBox cbMarcas = new JComboBox( marcas );

▪ Exemplo 2

String[ ] nums= "1","2","3","4","5","6","7","8","9";

JComboBox cbDemo = new JComboBox( nums );

Constrói caixa de combinação não-editável que mostra oselementos do arrayespecificado;

Por omissão:

▪ Selecionada 1º opção da lista;

▪ Comprimento máximo da lista = 8.

ConstrutoresCaixa de Combinação

Page 294: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Herdados

▪ Component

▪ Container

▪ JComponent

▪ Próprios (1/3)

▪ Mais usados

Declaração Funcionalidade

public void setEditable(boolean aFlag)

▪ Exemplo – caixa de combinação editável

JComboBox cb1 = new JComboBox( );

cb1.setEditable(true);

▪ Exemplo – caixa de combinação não-editável

JComboBox cb2 = new JComboBox( );

cb2.setEditable(false);

Especifica forma da caixa de combinação:

▪ Editável;

▪ Não-Editável.

public void setMaximumRowCount(int count)

▪ Exemplo

cb1. setMaximumRowCount(5);

Especifica nº máximo de opções visíveis (comprimento máximo visível da lista);

Se a quantidade total de opções exceder o valor especificado, a lista mostra uma scrollbar.

MétodosCaixa de Combinação

Page 295: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios (2/3)

Declaração Funcionalidade

public void addItem(E item)

▪ Exemplo

JComboBox cbMarcas = new JComboBox( );

cbMarcas.addItem("Audi");

Adiciona opção à lista.

public void insertItemAt(E item, int index)

▪ Exemplo

cbMarcas.insertItemAt("Alfa Romeo", 0);

Adiciona opção à lista, na posição index;

índices a partir de 0.

public void removeItem(Object item)

▪ Exemplo

cbMarcas.removeItem("Audi");

Remove opção especificada.

public void removeItemAt(int index) Remove opção na posição especificada.

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

MétodosCaixa de Combinação

Page 296: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Próprios (3/3)

Declaração Funcionalidade

public void setSelectedIndex(int index)

▪ Exemplo

cbMarcas.setSelectedIndex(2);

Seleciona opção com índice especificado;

índice 0 seleciona 1ª opção da lista;

índice -1 não seleciona opção.

public Object getSelectedItem()

▪ Exemplo

Object obj = cbMarcas.getSelectedItem();

Retorna opção selecionada;

Numa caixa de combinação editável poderetornar opção que não foi adicionada à lista.

MétodosCaixa de Combinação

Page 297: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo

Caixa de Combinação Não-Editável com StringsCaixa de Combinação

Page 298: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Tipos de Evento que Caixa de Combinação pode Gerar Evento

Action Selecionado item

ContainerComponente adicionado à caixa de combinação

Componente removido da caixa de combinação

Component

Caixa de combinação escondida

Caixa de combinação mostrada

Caixa de combinação movida

Caixa de combinação redimensionada

FocusCaixa de combinação adquire o foco de entrada

Caixa de combinação perde o foco de entrada

Item Selecionado/desselecionado item

Key

Tecla mantida premida

Tecla libertada

Tecla premida (toque)

Mouse

Clique no rato

Rato entrou na caixa de combinação

Rato saiu da caixa de combinação

Botão do rato premido

Botão do rato libertado

Rato movido

Rato arrastado (premido + movido)

Roda do rato movida

Eventos 1/2Caixa de

Combinação

Page 299: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

...

}

});

Eventos 2/2Caixa de

Combinação

Page 300: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

BibliografiaCaixa de Combinação

Page 301: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 302: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Bibliografia

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

Classe JCheckBoxCaixa de Verificação

Page 303: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioComponentesControlos Básicos

Page 304: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Bibliografia

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

Classe JRadioButtonBotão de Opção

Page 305: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 306: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Noção

▪ Tipos

▪ Hierarquia de Classes

▪ Gestores de Posicionamento

▪ BorderLayout

▪ FlowLayout

▪ GridLayout

▪ CardLayout

▪ Combinação de Diferentes Tipos num GUI

SumárioGestores Posicionamento

Page 307: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Gestores de Posicionamento (Layout Managers)

▪ Objetos que gerem dinamicamente a posição de componentes gráficos dentro dos contentores

▪ Exemplo

Noção de Gestor de PosicionamentoGestores Posicionamento

Gestores de Posicionamentocolocam componentes no

contentor

Contentor de Componentes

Gestores de Posicionamentoreposicionam componentes durante redimensionamento da janela

Page 308: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Tipos de Gestores de Posicionamento

▪ Nativos

▪ Próprios // Definidos pelo Programador

▪ Nativos

▪ BorderLayout

▪ FlowLayout

▪ GridLayout

▪ CardLayout

▪ BoxLayout

▪ GridBagLayout

▪ GroupLayout

▪ SpringLayout

Tipos de Gestores de Posicionamento

Abordados nestes slides

Gestores Posicionamento

Page 309: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Java Fornece uma Classe

▪ Para cada tipo de gestor

▪ Hierarquia de Classes

Hierarquia de Classes de Gestores de Posicionamento

Object

BorderLayout FlowLayoutSpringLayout GridLayout

package java.awt

Hierarquia de Classes de Gestores de Posicionamento

LayoutManager2

LayoutManagerinterfaces

is-a

implements

is-a

Serializable

interface

package java.io

Gestores Posicionamento

Page 310: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Gestores BorderLayout 1/12Gestores

Posicionamento

Page 311: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Gestores BorderLayout 2/12Gestores

Posicionamento

Page 312: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Gestores BorderLayout 3/12Gestores

Posicionamento

Page 313: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Funcionamento (3/3)

▪ Redimensão do contentor

▪ Em altura

▪ Altera altura

▪ Este

▪ Centro

▪ Oeste

▪ Em largura

▪ Altera largura

▪ Norte

▪ Centro

▪ Sul

Gestores BorderLayout 4/12Gestores

Posicionamento

Page 314: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Configurações de Funcionamento (1/2)

▪ Espaço entre regiões contíguas

▪ Por omissão

▪ Nulo

▪ Exemplo

▪ Modificável pelo programa

▪ Exemplo

Gestores BorderLayout 5/12Gestores

Posicionamento

Page 315: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Configurações de Funcionamento (2/2)

▪ Uso das regiões é opcional

Gestores BorderLayout 6/12Gestores

Posicionamento

Page 316: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (1/4)

▪ Declaração

public class BorderLayout extends Object

implements LayoutManager2, Serializable { … }

Gestores BorderLayout 7/12

Object

BorderLayout

package java.awt

LayoutManager2

LayoutManager

interfaces

is-a

implements

is-a

Serializable

interface

package java.io

Gestores Posicionamento

Page 317: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (2/4)

▪ Construtores // constroem novos objetos gestores BorderLayout

▪ Exemplos de Uso

Gestores BorderLayout 8/12

Declaração Funcionalidade

public BorderLayout() Gestor posiciona componentes sem intervalosentre eles.

public BorderLayout(int hgap, int vgap) Gestor posiciona componentes com intervalosentre eles.

Intervalo horizontal = hgap píxeis

Intervalo vertical = vgap píxeis

Gestores Posicionamento

vgap

hgap

BorderLayout b1 = new BorderLayout();

BorderLayout b2 = new BorderLayout( 20, 30 );

Page 318: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (3/4)

▪ Métodos de Instância // mais usados

▪ Exemplos de Uso

Gestores BorderLayout 9/12

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.

Gestores Posicionamento

BorderLayout b1 = new BorderLayout();

b1.setVgap(10);

b1.setHgap(20);

Page 319: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (4/4)

▪ Campos de Classe (mais usados)

▪ Exemplos de Uso

Gestores BorderLayout 10/12

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

Gestores Posicionamento

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 );

Page 320: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo – Contador de Cliques

▪ Posicionamento dos Componentes do GUI (Layout)

Número de Cliques: 0

FlowLayout

BorderLayout

Label

Botão de Comando

Painel Gestor

PainelBorderLayout

Centro

Sul

Gestores BorderLayout 11/12Gestores

Posicionamento

Page 321: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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);}

}

Gestores BorderLayout 12/12Gestores

Posicionamento

JLabel

Page 322: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Usados (por omissão)

▪ Paineis (Componentes JPanel)

▪ Interesse

▪ Posicionar componentes gráficos num contentor

▪ Em linha

▪ Exemplo

▪ Alinhar botões de comando na horizontal

Gestores FlowLayout 1/9Gestores

Posicionamento

Page 323: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

▪ 5 píxeis

▪ 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 em linhas consecutivas

▪ Não são redimensionados

▪ Controlam completamente a posição de cada componente▪ Programador não consegue definir

▪ Posição precisa de um componente

Gestores FlowLayout 2/9

LarguraAlterada

LarguraAlterada

Gestores Posicionamento

Page 324: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Configurações de Funcionamento

▪ Alinhamento das linhas de componentes

▪ Esquerda

▪ Direita

▪ Centro

▪ Intervalos entre componentes e entre componentes e bordo do contentor

▪ Vertical

▪ Horizontal

Gestores FlowLayout 3/9Gestores

Posicionamento

Page 325: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (1/3)

▪ Declaração

public class FlowLayout extends Object

implements LayoutManager, Serializable { … }

Gestores FlowLayout 4/9

Object

FlowLayout

package java.awt

LayoutManager

interface

implements

is-a

Serializable

interface

package java.io

Gestores Posicionamento

Page 326: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (1/3)

▪ Campos de Classe

▪ Exemplos de Uso

Gestores FlowLayout 5/9

Declaração Funcionalidade

public static final int LEFT = 0; Valor indica que cada linha de componentes deverá seralinhada à esquerda.

public static final int CENTER = 1; Valor indica que cada linha de componentes deverá seralinhada ao centro.

public static final int RIGHT = 2; Valor indica que cada linha de componentes deverá seralinhada à direita.

Gestores Posicionamento

FlowLayout.LEFT

FlowLayout.CENTER

FlowLayout.RIGHT

Page 327: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (2/3)

▪ Construtores // constroem novos objetos gestores FlowLayout

▪ Exemplos de Uso

Gestores FlowLayout 6/9

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.

Gestores Posicionamento

FlowLayout f1 = new FlowLayout();

FlowLayout f2 = new FlowLayout( FlowLayout.LEFT);

FlowLayout f3 = new FlowLayout( FlowLayout.RIGHT);

FlowLayout f4 = new FlowLayout( FlowLayout.RIGHT, 20, 30 );

Page 328: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Classe (3/3)

▪ Métodos de Instância // mais usados

▪ Exemplos de Uso

Gestores FlowLayout 7/9

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.

Gestores Posicionamento

FlowLayout f1 = new FlowLayout();

f1.setAlignment( FlowLayout.LEFT ); // alinhamento especificado por campo de classe LEFT

f1.setVgap( 10 );

f1.setHgap( 20 );

Page 329: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo

▪ Posicionamento dos Componentes do GUI (Layout)

Número de Cliques: 0

Flowlayout

BorderLayout

Label

Botão de Comando

Painel Gestor

PainelBorderLayout

Centro

SulPainel

FlowLayout

Gestores FlowLayout 8/9Gestores

Posicionamento

Page 330: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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;

}}

Gestores FlowLayout 9/9Gestores

Posicionamento

JButton

Page 331: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Gestores GridLayout 1/6

Redimensionamento de Contentor GridLayout

Contentor GridLayout

Gestores Posicionamento

Page 332: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

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)...

Gestores GridLayout 2/6

Intervalo entre Componentes

Gestores Posicionamento

Page 333: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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);

▪ Nº de linhas = 5

GridLayout g = new GridLayout(5,0);

GridLayout g = new GridLayout(5,3);

Gestores GridLayout 3/6

(1,0)(1,5)

(5,0)(5,3)

Gestores Posicionamento

Page 334: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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);

Gestores GridLayout 4/6

(9,0)(9,3)(9,5)

Gestores Posicionamento

Page 335: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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);

Gestores GridLayout 5/6Gestores

Posicionamento

Page 336: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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);}

}

Gestores GridLayout 6/6Gestores

Posicionamento

Page 337: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Gestores CardLayout 1/7Gestores

Posicionamento

Contentor CardLayout

Page 338: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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)

Gestores CardLayout 2/7Gestores

Posicionamento

Page 339: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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)

Gestores CardLayout 3/7Gestores

Posicionamento

Page 340: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento para usar (2/2)

4. Trocar o cartão visível

Gestores CardLayout 4/7Gestores

Posicionamento

Page 341: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo Completo (1/3)

Gestores CardLayout 5/7Gestores

Posicionamento

Page 342: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Gestores CardLayout 6/7Gestores

Posicionamento

▪ Exemplo Completo (2/3)

Page 343: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Gestores CardLayout 7/7Gestores

Posicionamento

▪ Exemplo Completo (3/3)

Page 344: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Combinação de Vários Tipos de Gestores

Contentor BorderLayout

Contentores CardLayoutFlowLayout

Contentor GridLayout

CenterWest East

Contentor GridLayout

Contentor BorderLayoutCenter

North

Gestores Posicionamento

Page 345: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 346: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Conceitos Básicos

▪ Manipulação de Eventos

▪ Demos

SumárioEventos

Page 347: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioEventosConceitos Básicos

Page 348: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Funcionamento de Aplicações GUI

▪ É orientado por eventos

▪ Em geral, só executam ações após a ocorrência de acontecimentos, tais como:

▪ Cliques no botão do rato

▪ Movimentos do rato

▪ Teclas premidas

Noção de EventoEventos

▪ 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

▪ Quais são os eventos que aplicação GUI pode manipular?

Sistema Operativo

Aplicação GUI é orientada por Eventos

Eventos

Aplicação GUI

Captura de Eventos

Tratamento de Eventos

Page 349: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Eventos iniciados pelo utilizador▪ Eventos do rato

▪ Movimentos // tipo Mouse▪ Cliques // tipo Action, Mouse

▪ Eventos do teclado▪ Teclas pressionadas // tipo Key

Tipos de Evento

Tipo de Evento Evento

Action

Clique num botão de comandoClique num item de menuTerminada edição de campo de textoSelecionado item de caixa de combinação

Component

Componente escondido Componente mostradoComponente movido Componente redimensionado

KeyTecla mantida premidaTecla libertadaTecla premida (toque)

Mouse

Clique no ratoRato entrou no componenteRato saiu do componenteBotão do rato premidoBotão do rato libertadoRato movidoRato arrastado (premido + movido)Roda do rato movida

Tipos de Evento Evento

ContainerComponente adicionado

Componente removido

ItemItem selecionado

Item desselecionado

Adjustment Scrollbar movido

FocusComponente ganha foco

Componente perde foco

Text Texto alterado

Window

Janela abriu

Janela fechou

Janela ficou activa

Janela ficou inactiva

Janela ficou minimizada

Janela ficou restaurada (tamanho original)

Utilizador quer fechar Janela

Eventos

Page 350: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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)

Classes de Evento

ActionEvent ItemEvent

EventObject

FocusEvent WindowEvent

KeyEvent

AdjustmentEvent ComponentEvent

PaintEvent

MouseEvent

MouseWheelEvent

Object

TextEvent

ContainerEvent

AWTEvent

InputEvent

Packages:• java.util ( EventObject )• Java.lang ( Object )

package java.awt.event

Eventos

Page 351: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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)

▪ Especificam▪ Métodos de evento para tratar todos os eventos do tipo correspondente // slides seguintes

Interfaces Trata Evento

ActionListener

ItemListener

FocusListener

WindowListener

KeyListener

AdjustmentListener

ComponentListener

MouseListener

MouseWheelListener

EventListener

TextListenerContainerListener

package java.awt.eventExcepto EventListener

(java.util)

Eventos

Page 352: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Métodos de Evento 1/2

Evento Classe de Evento Interface Trata Evento Método de Evento

Clique num botão de comando

ActionEvent ActionListener actionPerformed(ActionEvent e)Clique num item de menu

Termina edição de campo de texto

Selecionado item caixa combinação

Item seleccionado/desseleccionado ItemEvent ItemListener itemStateChanged(ItemEvent e)

Componente escondido

ComponentEvent ComponentListener

componentHidden(ComponentEvent e)

Componente mostrado componentShown(ComponentEvent e)

Componente movido componentMoved(ComponentEvent e)

Componente redimensionado componentResized(ComponentEvent e)

Componente adquire focoFocusEvent FocusListener

focusGained(FocusEvent e)

Componente perde foco focusLost(FocusEvent e)

Tecla mantida premida

KeyEvent KeyListener

keyPressed(KeyEvent e)

Tecla libertada keyReleased(KeyEvent e)

Tecla premida keyTyped(KeyEvent e)

Clique no rato

MouseEvent

MouseListener

mouseClicked(MouseEvent e)

Rato entrou no componente mouseEntered(MouseEvent e)

Rato saiu do componente mouseExited(MouseEvent e)

Botão do rato premido mousePressed(MouseEvent e)

Botão do rato libertado mouseReleased(MouseEvent e)

Rato movidoMouseMotionListener

mouseMoved(MouseEvent e)

Rato arrastado (movido + premido) mouseDragged(MouseEvent e)

Roda do rato movida MouseWheelListener mouseWheelMoved(MouseWheelEvent e)

Eventos

Page 353: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Métodos de Evento 2/2

Evento Classe de EventoInterface

Trata EventoMétodo de Evento

Componente adicionadoContainerEvent ContainerListener

componentAdded(ContainerEvent e)

Componente removido componentRemoved(ContainerEvent e)

Scrollbar movido AdjustmentEvent AdjustmentListener adjutmentValue(AdjustmentEvent e)

Texto alterado TextEvent TextListener textValueChanged(TextEvent e)

Janela abriu

WindowEvent WindowListener

windowOpened(WindowEvent e)

Janela fechou windowClosed(WindowEvent e)

Janela ficou activa windowActivated(WindowEvent e)

Janela ficou inactiva windowDeactivated(WindowEvente)

Janela ficou minimizada windowIconified(WindowEvent e)

Janela restaurada (tamanho original) windowDeiconified(WindowEvent e)

Utilizador quer fechar Janela windowClosing(WindowEvent e)

Eventos

Page 354: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Tipos de Eventos Gerados por Componentes GUIEventos

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

Page 355: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Principais Eventos Gerados por Componentes GUI

Componente Evento Tipo de Evento Gerado

JButton Clique no botão

Action

JComboBox Selecionado item

JList Duplo clique

JMenuItem Selecionado Item de menu

JTextField Terminada edição de texto com ENTER

JCheckBox Selecionado ou desselecionado

ItemJCheckboxMenuItem Selecionado ou desselecionado

JList Selecionado ou desselecionado item

JTextComponent Texto alterado Text

JScrollBar Scrollbar movido Adjustment

JComponent

Componente movido, redimensionado, escondido ou mostrado Component

Componente adquire ou perde foco Focus

Tecla pressionada ou libertada Key

Rato com botão pressionado ou libertado Mouse

Window Utilizador quer fechar janela Window

Eventos

Page 356: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

SumárioEventosManipulação

Page 357: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Manipulação de Eventos▪ Aplicações GUI precisam de fazer:

▪ Captura de eventos

▪ Tratamento de eventos

▪ Programador precisa de conhecer

▪ Modelo de Eventos (AWT)

EventosManipulação

Sistema Operativo

Aplicação GUI é orientada por Eventos

Eventos

Aplicação GUI

Captura de Eventos

Tratamento de Eventos

Page 358: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

implementa

Objeto Trata Eventoexecuta

Método de Evento

InterfaceActionListener

Método de Evento actionPerformed(ActionEvent e)

Botão de Comandoacionado

Objeto Trata Eventotipo

ActionListener

(Registado no Botão)

Método de Evento/* recebe por parâmetro

o Objeto de Evento */

Objeto de Evento tipo

ActionEvent

(Avisa Objeto Trata Evento)

Referência do

Botão de Comando

Eventocomunicado a

Objeto Trata Evento registado

no Botão de Comando

Objeto Fonte de Eventotipo

Botão de Comando

RegistoObjeto Trata Evento

Tipo ActionListener

Método de RegistoaddActionListener(ActionListener l)

GeraEvento

tipoAction

Modelo de Eventos (AWT)▪ Exemplo de um Evento Action Gerado por um Botão de Comando (1/3)

EventosManipulação

Page 359: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplo de um Evento Action Gerado por um Botão de Comando (2/3)▪ Classe Interna para Manipular o Evento

Modelo de Eventos (AWT)

Objeto Fonte do Evento

Método de Evento do

Objeto Trata Evento

/* recebe, por parâmetro, oObjeto de Evento enviado pelobotão btnSair */

Criação do Objeto Trata Evento

Registo do Objeto Trata Evento

EventosManipulação

Page 360: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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, oObjeto de Evento enviado pelobotão btnSair */

EventosManipulação

Page 361: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Fonte de Evento

Trata Evento

Trata Evento

Trata Evento

Evento

Evento

Evento

Modelo de Eventos (AWT)

Modelo de Eventos (AWT)Eventos

Manipulação

Page 362: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Responsabilidade

▪ Tratar um evento após notificação recebida num objeto Evento

▪ 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

Fonte de Evento

Trata Evento

Trata Evento

Trata Evento

Evento

Evento

Evento

Modelo de Eventos (AWT)

InterfaceTrata Evento

Implementa

Objeto Trata Evento 1/2Eventos

Manipulação

Page 363: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Exemplos de classes Trata Evento

▪ Para tratar eventos do tipo Action

• Implementar interface ActionListener implementar método de evento actionPerformedespecificado 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

Objeto Trata Evento 2/2

Evento Classe de Evento Interface Trata Evento Método de Evento

Clique num botão de comando

ActionEvent ActionListener actionPerformed(ActionEvent e)Clique num item de menu

Termina edição de campo de texto

Selecionado item caixa de combinação

Clique no rato

MouseEvent

MouseListener

mouseClicked(MouseEvent e)

Rato entrou no componente mouseEntered(MouseEvent e)

Rato saiu do componente mouseExited(MouseEvent e)

Botão do rato premido mousePressed(MouseEvent e)

Botão do rato libertado mouseReleased(MouseEvent e)

Rato movidoMouseMotionListener

mouseMoved(MouseEvent e)

Rato arrastado (movido + premido) mouseDragged(MouseEvent e)

EventosManipulação

Page 364: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

▪ Exemplos

▪ Botão de comando // objeto JButton

▪ Label // objeto JLabel

▪ Campo de texto // objeto JTextField

▪ Cada Componente GUI fornece

▪ Métodos para registar objetos Trata Evento dos tipos de evento que pode gerar

▪ 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

Fonte de Evento 1/2

Fonte de Evento

Trata Evento

Trata Evento

Trata Evento

Evento

Evento

Evento

Modelo de Eventos (AWT)

EventosManipulação

Page 365: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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)

Fonte de Evento 2/2

Componente Action Adjustment Component Container Focus Item Key Mouse Text Windows

JButton

JDialog

JFrame

JLabel

JList

JMenu

JMenuItem

JPanel

JTextField

Window

EventosManipulação

Page 366: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Objeto Evento 1/5

Fonte de Evento

Trata Evento

Trata Evento

Trata Evento

InterfaceTrata Evento

Implementa

Modelo de Eventos (AWT)

Informação sobre o Evento

Evento

EventosManipulação

Page 367: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ É instância de Classe de Evento

▪ Existe uma dessas classes para cada tipo de evento

▪ Exemplos

Objeto Evento 2/5

Evento Tipo de Evento Classe de Evento

Clique num JButton

Action ActionEventClique num JMenuItem

Termina a edição de um TextField

Selecionado item caixa de combinação

Item selecionado/desselecionado Item ItemEvent

Componente escondido

Component ComponentEventComponente mostrado

Componente movido

Componente redimensionado

Componente adquire focoFocus FocusEvent

Componente perde foco

Clique no rato

Mouse

MouseEvent

Rato entrou no componente

Rato saiu do componente

Rato com botão premido

Rato com botão libertado

Rato movidoMouseMotionEvent

Rato arrastado (movido + premido)

EventosManipulação

Page 368: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Passado por Parâmetro▪ Aos métodos de evento dos objetos Trata Evento

▪ Exemplo

▪ Métodos (mais usados)

Objeto Evento 3/5

Parâmetro e• Passa para dentro do método o objeto

Evento gerado pela Fonte de Evento

Método Obs

public Object getSource()

• Exemplo: e.getSource()

• Retorna o objeto Fonte do Evento

• Permite a um método de evento processar diferentes fontes

• Exemplo: e.getSource() == btnSair

public String getActionCommand()

• Exemplo: e.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: retorna o título do botão Sair

EventosManipulação

Page 369: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Objeto Evento 4/5Eventos

Manipulação

Page 370: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

Objeto Evento 5/5

Método de Evento trata eventos do tipo Action gerados por duas Fontes de Evento diferentes

EventosManipulação

Page 371: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Procedimento

1. Criar classe de objetos Trata Evento

2. Criar objeto Trata Evento

3. Registar objeto Trata Evento na Fonte de Evento

Tratamento de Eventos 1/2Eventos

Manipulação

Page 372: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

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

Tratamento de Eventos 2/2Eventos

Manipulação

Page 373: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse: ser reutilizada em múltiplas classes

▪ Possível: se não precisar de membros inacessíveis de outras classes

Classe Trata Evento Externa

public class TrataEventoAction implements ActionListener { // Classe Trata Evento Externapublic 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 Actionbtn.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(); }

}

EventosManipulação

Page 374: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Classe Trata Evento Interna (Identificada)

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 Actionbtn.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(); } }

EventosManipulação

Page 375: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse: tratar apenas um tipo de evento de uma Fonte de Evento

Classe Trata Evento Anónima

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 registadopublic 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(); } }

EventosManipulação

Page 376: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Interesse

▪ Simplificar criação de Classes Trata Evento que precisam de implementar apenas alguns métodos deInterfaces Trata Evento que especificam múltiplos métodos

▪ Exemplo

▪ Interface WindowListener especifica vários métodos e obriga a sua implementação em classesinstanciá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

Classes Adapter 1/2Eventos

Manipulação

Page 377: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Usadas para definir Classes Trata Evento

▪ Têm de ser herdadas da classe Adapter

▪ Reescrevem apenas métodos de evento necessários

▪ Exemplos

Classes Adapter 2/2

// 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);});

EventosManipulação

Page 378: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Demos

▪ Duplo-Clique numa JLabel

▪ Confirmação no Botão Fechar da Janela

SumárioEventosDemos

Page 379: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Duplo-Clique numa JLabel

Demos 1/2

JLabel

EventosDemos

Page 380: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Confirmação no Botão Fechar da Janela

Demos 2/2EventosDemos

Page 381: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Sumário GeralInterfaces Gráficas

Page 382: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ 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

Bibliografia Geral

Page 383: Interfaces Gráficas - dei.isep.ipp.ptnfreire/JAVA - GUI.pdf · Interface do Utilizador Noção ... Usados na Estrutura da Interface Gráfica Para suportar componentes gráficos Subcategorias

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

▪ Componentes Gráficos

▪ Controlos Básicos

▪ Botão de Comando

▪ JButton

▪ Entrada de Texto▪ JTextField

▪ Escolha de Opções▪ JCheckBox▪ JComboBox▪ JRadioButton▪ JList

▪ Menus▪ JMenu▪ JMenuBar▪ JMenuItem

▪ Apresentação de Informação▪ JLabel▪ JSeparator▪ JTable

Índice Remissivo▪ Componentes Gráficos (continuação)

▪ Contentores de Componentes Gráficos

▪ Painéis▪ JLayeredPane▪ JPanel▪ JRootPane▪ JScrollPane▪ JTabbedPane

▪ Janelas▪ JFrame

▪ Caixas de Diálogo▪ JDialog▪ JFileChooser▪ JOptionPane

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

▪ Manipuladores de Eventos▪ Evento Action