Interfaces Gráficas: Componentes Gráficos Gestores de Posicionamento Manipuladores de Eventos
Interfaces Gráficas: Componentes Gráficos Gestores de Posicionamento Manipuladores de Eventos
Interfaces Gráficas
Componentes Gráficos
Gestores de Posicionamento
Manipuladores de Eventos
▪ 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
▪ 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
Aplicação
Interface do Utilizador (UI)
Entrada Saída
Utilizador
Botão de Comando
▪ Tipos de Objetos
▪ Componentes Gráficos
▪ Gestores de Posicionamento // Layout Managers
▪ Manipuladores de Eventos // Event Listeners
▪ Manipuladores de Eventos
▪ Respondem às solicitações do utilizador
▪ Exemplo
▪ Resposta a cliques nos botões de comando
▪ Swing
▪ 2º Toolkit Java para construir GUIs
▪ Introduzido pelo JDK 1.1
▪ Não substitui completamente o AWT
▪ Construído por cima do AWT
▪ Manipuladores de Eventos e Gestores de Posicionamento são AWT
▪ Estilo dos componentes gráficos
▪ Independente do Sistema Operativo
Swing Componentes Gráficos
▪ Fornecidos vários estilos
Gestores de Posicionamento
▪ Classes Swing AWT Manipuladores de Eventos
▪ package javax.swing
▪ Nome começado por J
▪ Em geral
Nelson Freire (ISEP–DEI-PPROG 2016/17) 10/383
Introdução Construção de um GUI 1/3
▪ Formas
▪ Visual
▪ Programada
▪ Programador
▪ Desenha interface gráfico
▪ Altera propriedades de objetos
▪ Editor GUI
▪ Cria código
▪ Automaticamente
▪ Programador
▪ Precisa de conhecer código GUI
▪ Estudada
▪ Em PPROG
▪ 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
▪ Subcategorias
▪ Editável
▪ Não-Editável
Utilizador
▪ Contentores de Componentes Gráficos
▪ Usados na Estrutura da Interface Gráfica
▪ Para suportar componentes gráficos
▪ Subcategorias
▪ Nível Superior
▪ Genéricos
▪ Especiais
Nelson Freire (ISEP–DEI-PPROG 2016/17) 16/383
Componentes
Introdução Controlos Básicos 1/3
Vantagem:
▪ Ocupa espaço reduzido da
GUI
(área da barra de menus).
Painel de Edição JEditorPane Mostrar e editar texto com estilo nativo ou definido pelo utilizador.
▪ Subcategorias
▪ Nível superior
▪ Genérico
▪ Especial
JFrame JApplet
JDialog
Java Windows
Java
Java
Windows
Windows
▪ 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
SWING AWT
Component
Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane
JLabel JFileChooser
▪ Declaração
public abstract class Component extends Object
implements ImageObserver, MenuContainer, Serializable { ... }
▪ Classe Abstrata
▪ Não é instanciável
Object
▪ Topo da Hierarquia
▪ Superclasse AWT
Component
▪ Todas as classes de componentes gráficos
▪ Características
▪ Comuns a todos os componentes gráficos
▪ Objetivo
▪ Todos os objetos da hierarquia serem componentes gráficos
▪ Tenham representação gráfica num monitor
▪ Suportem interação com o utilizador
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.
public void setSize( int width, int height ) Usado para modificar o tamanho de contentores
gráficos de nível superior, como por exemplo,
JFrame e JDialog;
O tamanho é definido através da largura (width) e
altura (height), e é modificado dinamicamente;
Estas dimensões são automaticamente
aumentadas se qualquer uma delas for menor
que o tamanho mínimo especificado previamente
através do método setMinimumSize.
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox JRadioButton
JMenu JMenuItem JMenuBar
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox
JMenu JMenuItem JMenuBar BorderLayout FlowLayout
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox
JMenu JMenuItem JMenuBar BorderLayout FlowLayout
Declaração Funcionalidade
public void setBackground( Color bg ) Especifica a cor de fundo do
componente.
▪ Exemplo:
obj.setBackground(Color.RED);
▪ Package
▪ java.awt
Object
▪ Declaração
public class Container extends Component { ... } Component AWT
▪ Classe Instanciável
Container
▪ Componentes Adicionados
▪ Registados numa lista
▪ Ordem na lista define
▪ Ordem dos componentes dentro do contentor
▪ Frente-para-Trás
▪ Sem especificar índice
▪ Inseridos no fim da lista
▪ Debaixo dos componentes adicionados anteriormente
public Component add(Component comp, int index) Adiciona o componente especificado ao painel
(contentor) na posição indicada.
▪ Package Window
▪ javax.swing
Frame Dialog
SWING
▪ Declaração
public abstract class JComponent extends Container
implements Serializable { ... }
▪ Classe Abstrata
▪ Não é instanciável
Declaração Funcionalidade
public void setBorder(Border border) Especifica um bordo.
▪ Exemplos:
▪ Bordo Vazio:
painel.setBorder( new EmptyBorder(10,5,5,10) );
▪ (10,5,5,10) = (topo, esquerda, base, direita)
painel.setBorder( BorderFactory.CreateEmptyBorder(10,5,5,10) );
▪ Bordo com Título:
painel.setBorder( BorderFactory.CreateTitleBorder("Título") );
JPanel JLayeredPane JRootPane JScrollPane JFrame JDialog JFileChooser JButton JLabel JTextField JList JComboBox JCheckBox JRadioButton
JMenu JMenuItem JMenuBar
▪ 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
▪ 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
SWING AWT
Component
Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane
JLabel JFileChooser
▪ Exemplo
GUI Posicionamento dos Componentes do GUI (Layout)
Painel Gestor
Flowlayout
BorderLayout
Número de Cliques: 0
Label
Botão de Comando
▪ Declaração
public class JPanel extends JComponent Object
implements Accessible { ... }
AWT
Component
▪ Classe Instanciável
▪ Objetos são painéis Container
JFrame
SWING
▪ Próprios
▪ Pouco usados
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/panel.html
Y Z
▪ Declaração
public class JLayeredPane extends JComponent
implements Accessible { ... }
Object
AWT
Component
Container
JComponent Window
JLayeredPane Frame
JFrame
SWING
▪ Próprios
Declaração Funcionalidade
public void moveToBack(Component c) Move componente c para baixo de
todos os componentes da sua camada
corrente (posição -1).
public void moveToFront(Component c) Move componente c para cima de todos
os componentes da sua camada
corrente (posição 0).
public void setLayer(Component c, int layer, int position) Especifica camada do componente c e a
sua posição dentro da camada.
JFrame JDialog
Y Z
▪ http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html
JFrame JDialog
▪ Adicionalmente
▪ Posicionar componentes em camadas
JFrame JDialog
JFrame JDialog
▪ Quando Visível
▪ Está à frente dos outros painéis
▪ É Transparente
▪ Semelhante ao Vidro
▪ Capacidade
▪ Capturar Eventos de Entrada
▪ Interesse
▪ Capturar eventos do root pane numa área que contém múltiplos componentes gráficos
▪ Exemplo
▪ Desativar eventos do rato numa área com vários componentes
▪ Pintar área que contém múltiplos componentes gráficos
▪ Exemplo
▪ Mostrar imagem sobre vários componentes
JFrame JDialog
▪ Interesse
▪ Contentor de Menus
JFrame JDialog
▪ Declaração
public class JRootPane extends JComponent
implements Accessible { ... }
Object
AWT
Component
Container
JComponent Window
JRootPane Frame
JFrame
SWING
JFrame JDialog
▪ Próprios
Declaração Funcionalidade
public void setJMenuBar(JMenuBar menubar) Especifica a barra de menus da janela.
public JMenuBar getJMenuBar() Retorna barra de menus.
JFrame JDialog
JFrame JDialog
▪ Exemplos
JList
▪ Declaração
public class JScrollPane extends JComponent
implements ScrollPaneConstants, Accessible { ... }
Object
AWT
Component
Container
JComponent Window
JScrollPane Frame
JFrame
SWING
JList
JList
▪ Próprio
▪ Exemplo
Declaração Funcionalidade
public void setWheelScrollingEnabled( boolean handleWheel ) Inibe/desinibe o deslocamento
controlado pelo movimento da
roda do rato.
JList
JList
▪ Declaração
public class JTabbedPane extends JComponent
implements Serializable, Accessible, SwingConstants { ... }
Object
Component
Container
JComponent
JTabbedPane
Declaração Funcionalidade
public JTabbedPane( ) Constrói um tabbed pane vazio com o
▪ Exemplos: posicionamento dos separadores no
topo.
▪ JTabbedPane tabPane = new JTabbedPane();
▪ JTabbedPane tabPaneLista = new JTabbedPane();
public JTabbedPane( int tabPlacement ) Constrói um tabbed pane vazio com o
▪ Exemplo: posicionamento dos separadores
especificado;
▪ JTabbedPane tabPaneLista =
Opções tabPlacement:
new JTabbedPane( JTabbedPane.LEFT ); • JTabbedPane.TOP
• JTabbedPane.BOTTOM
• JTabbedPane.LEFT
• JTabbedPane.RIGHT
public JTabbedPane( int tabPlacement, int tabLayoutPolicy ) Constrói um tabbed pane vazio com o
▪ Exemplo: posicionamento dos separadores
especificado, com espaço e sem espaço,
▪ JTabbedPane tabPaneLista = new JTabbedPane( para visualizar todos (tabLayoutPolicy) ;
JTabbedPane.LEFT, Opções tabLayoutPolicy:
JTabbedPane. WRAP_TAB_LAYOUT); • JTabbedPane. WRAP_TAB_LAYOUT
• JTabbedPane. SCROLL_TAB_LAYOUT
▪ Próprios (1/2)
▪ Mais usados
Declaração Funcionalidade
public void addTab( String title, Component component ) Adiciona ao tabbed pane um
separador, sem imagem, com
▪ Exemplo: o título e o componente,
JTabbedPane tabPane = new JTabbedPane(); especificados;
Este componente é
tabPane.addTab( "Início", new PainelInicio() ); visualizado quando o título
do separador é clicado.
public void addTab( String title, Icon icon, Component component, String tip ) Adiciona ao tabbed pane um
separador com o título,
imagem, componente e dica,
especificados.
▪ https://docs.oracle.com/javase/tutorial/uiswing/components/tabbedpane.html
▪ Declaração
public class Window extends Container
implements Accessible { … }
Object
Component AWT
Container
Window
▪ Próprios
Declaração Funcionalidade
public void pack() Modifica tamanho da Janela para mostrar
todos os componentes com o seu tamanho
preferido;
Deve ser chamado após adição de todos os
componentes.
public void dispose() Liberta todos os recursos nativos do monitor
usados pela janela, seus sub-componentes.
Fecha a aplicação no caso da janela ser a janela
principal da aplicação.
public void setLocationRelativeTo( Component c ) Chamada setLocationRelativeTo(null) coloca a
janela no centro do ecrã;
Deve ser invocado depois da definição do
tamanho da janela ( pack() ou setSize() ).
JFrame JDialog
▪ Declaração
public class Frame extends Window
implements MenuContainer { … }
Object
Component AWT
Container
Window
Frame
▪ Próprios
▪ Mais usados
Declaração Funcionalidade
public synchronized void setExtendedState( int state )
▪ Exemplo para maximizar janela:
setExtendedState(JFrame.MAXIMIZED_BOTH);
JFrame
▪ Exemplo
▪ Representação Gráfica
Moldura
▪ Declaração
public class JFrame extends Frame
implements WindowConstants, Accessible, RootPaneContainer { ... }
Object
Component AWT
Container
Window
Frame
JFrame SWING
Moldura
▪ Desenhada
▪ Pelo sistema de janelas do sistema operativo
▪ Swing
▪ Desenha tudo ... exceto moldura
▪ Declarações
Declaração Funcionalidade
public JFrame() throws HeadlessException Cria janela sem título.
public JFrame(String title) throws HeadlessException Cria janela com título title.
▪ 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.
Declaração Funcionalidade
public void setDefaultCloseOperation(int operation) Define operação que ocorrerá, por omissão,
quando utilizador inicia fecho da janela no botão
▪ Exemplo: close da moldura;
setDefaultCloseOperation(EXIT_ON_CLOSE)
Operações à escolha
DO_NOTHING_ON_CLOSE // Não faz nada
HIDE_ON_CLOSE // Esconde janela
DISPOSE_ON_CLOSE // Fecha janela
EXIT_ON_CLOSE // Termina aplicação
Por omissão, o botão close da janela executa a
operação HIDE_ON_CLOSE.
Notas
▪ Janela e lógica do programa são executados
em threads diferentes;
▪ Aplicação gráfica pode ter o programa em
execução sem GUI visível.
JDialog
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}
setSize(JANELA_LARGURA , JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}
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;
Declaração Funcionalidade
public void addWindowListener( WindowListener l ) Regista objeto para tratar
evento do tipo Window.
▪ Exemplo:
public class Janela extends JFrame {
public Janela() {
super("Demo");
...
addWindowListener( new TrataEvento() );
}
private class TrataEvento extends WindowAdapter {
@Override
public void windowClosing( WindowEvent e) {
…
}
}
}
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/frame.html
SWING AWT
Component
Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane
JLabel JFileChooser
▪ Dependente de Janelas
▪ Destruição de janela destruição das caixas de diálogo dependentes
▪ Minimização de janela esconde caixas de diálogo dependentes
▪ Abertura de janela minimizada mostra caixas de diálogo dependentes
Nelson Freire (ISEP–DEI-PPROG 2016/17) 120/383
Caixas de Diálogo Introdução 2/4
▪ Tipos de Funcionamento
▪ Modal
▪ Modeless
▪ Caixa Modal
▪ Bloqueia acesso do utilizador à janela pai (criadora da caixa)
▪ Interesse
▪ Obrigar utilizador a interagir com caixa de diálogo
▪ Indispensável para execução da aplicação
▪ Caixa Modeless
▪ Não bloqueia acesso do utilizador à janela pai
▪ Interesse
▪ Permitir ao utilizador a introdução de dados
na janela pai
▪ Próprias
▪ Para Diálogos
▪ Personalizados
▪ Mais complexos
▪ Permite Tipo Modeless
▪ Classes derivadas da classe JDialog
Nelson Freire (ISEP–DEI-PPROG 2016/17) 122/383
Caixas de Diálogo Introdução 4/4
▪ Bibliografia
▪ http://download.oracle.com/javase/tutorial/uiswing/components/dialog.html
▪ Declaração
public class JOptionPane extends JComponent
implements Accessible { ... }
Object
Component
Container
JComponent Window
JFrame JDialog
▪ Permitem
▪ Ler
Informação - Utilizador
▪ Mostrar
▪ Funcionamento
▪ Modal
Caixa de Mensagem
▪ Componentes das Caixas
(Mostrar mensagem)
▪ Comuns
▪ Título
▪ Ícone
Caixa de Confirmação ▪ Identifica tipo mensagem
(Utilizador confirmar ação) ▪ Mensagem
▪ Pode ser contentor JPanel
▪ Um ou mais botões de opção
▪ OK
Caixa de Entrada ▪ Yes, Cancel, No
(Ler dados do utilizador) ▪ Sim, Cancelar, Não
▪ Específicos
▪ TextField // Entrada Texto
Caixa de Opção
▪ ComboBox // Escolha Objetos
(Utilizador escolher opção
▪ Opções personalizadas
▪ Podem ser objetos)
▪ JOptionPane.showInputDialog(...) ▪ JOptionPane.showOptionDialog(...)
Caixa de Entrada
▪ Declarações de Métodos
public static void showMessageDialog( Component parent,
Object message ) Definição do parâmetro
parent garante caixa de
public static void showMessageDialog( Component parent, diálogo sobre (frente) esse
Object message, componente
String title,
int messageType)
public static void showMessageDialog( Component parent,
Object message,
String title,
int messageType,
Icon icon )
▪ Exemplo
JFrame janela = new JFrame("Biblioteca de Livros");
…
JOptionPane.showMessageDialog( janela, "Livro guardado com sucesso", “Guardar Livro",
JOptionPane.INFORMATION_MESSAGE);
▪ Exemplo
▪ ComboBox
▪ Retorna objeto escolhido pelo utilizador
▪ Exemplos
▪ Livro, Carro, Trabalhador, etc.
▪ Objetos são fornecidos num array
Caixa de Entrada (Objeto)
▪ Tipo de array
▪ Pode ser qualquer tipo referência
▪ Exemplo
String[] livros = {"Java 6", "Big Java"};
Livro[] livros = { new Livro("Java 6"), new Livro("Big Java") }
Nelson Freire (ISEP–DEI-PPROG 2016/17) 133/383
JOptionPane Caixa de Entrada 2/3
▪ Declarações Métodos
public static String showInputDialog( Object message )
public static String showInputDialog( Component parent,
Object message )
public static String showInputDialog( Object message,
Object initialSelectionValue )
public static String showInputDialog( Component parent,
Object message, Caixa de Entrada (Texto)
Object initialSelectionValue )
public static String showInputDialog( Component parent,
Object message,
String title,
int messageType )
▪ Botões de Opção
▪ Podem ser personalizados
▪ Definidos através de array de qualquer tipo referência Caixa de Opção
▪ Retorna
▪ Índice de array da opção escolhida
▪ Declaração de Método
public static int showOptionDialog( Component parent,
Object message,
String title,
int optionType, // irrelevante para options ≠ null
int messageType,
Icon icon, // personaliza ícone
Object[] options,
Object initialValue ) // botão que adquire o foco (omissão)
Caixa de Opção
▪ http://download.oracle.com/javase/tutorial/uiswing/components/layeredpane.html
Processamento do ficheiro
ou da pasta escolhida
▪ Responsabilidade da
aplicação
Gravação de ficheiros
▪ Responsabilidade da
aplicação
Caixa de Diálogo
Modal
Janela Pai
inacessível
ao utilizador
▪ Declaração
public class JFileChooser extends JComponent
implements Accessible { ... }
Object
Component
Container
JComponent Window
JFrame JDialog
Declaração Funcionalidade
public JFileChooser() Constrói objeto JFileChooser usando a
pasta do utilizador, por omissão.
▪ Exemplo:
JFileChooser fc = new JFileChooser(); Esta pasta depende do sistema operativo:
▪ Windows: "Meus Documentos"
▪ Unix: "Home"
Declaração Funcionalidade
public File getSelectedFile() Retorna objeto File que descreve o
ficheiro selecionado.
▪ Exemplo:
JFileChooser fc = new JFileChooser();
int resp = fc.showOpenDialog( this ); // this=janela pai
if( resp == JFileChooser.APPROVE_OPTION)
File f = fc.getSelectedFile();
...
Declaração Funcionalidade
public File setFileFilter( FileFilter filter ) Define o filtro de ficheiros atual.
▪ FileFilter O filtro de ficheiros é usado na vista do
public abstract class FileFilter { utilizador.
// Indica se o ficheiro f é aceite pelo filtro. Exemplo:
public abstract boolean accept( File f );
▪ http://download.oracle.com/javase/tutorial/uiswing/components/filechooser.html
▪ Declaração
public class Dialog extends Window { … }
Object
AWT
Component
Container
JComponent Window
JOptionPane Dialog
JDialog
SWING
public Dialog( Frame owner, boolean modal ) Cria caixa de diálogo invisível e sem
título, com janela pai e tipo de
funcionamento (true=modal ou
false=modeless) especificados.
▪ Próprios
Declaração Funcionalidade
public void setBackground(Color bgColor) Especifica cor de fundo da caixa de diálogo.
▪ Exemplo:
getContentPane().setBackground(Color.RED);
public void setResizable(boolean resizable) setResizable(false) impede utilizador de
redimensionar janela.
public void setTitle(String title) Modifica título da caixa de diálogo.
public void setVisible(boolean b) Mostra ( setVisible(true) ) ou esconde
( setVisible(false) ) caixa de diálogo.
public void setUndecorated(boolean undecorated) Inibe/desinibe moldura da caixa de diálogo;
Só pode ser chamado quando a caixa de
diálogo não está visível.
▪ Exemplo
▪ Declaração
public class JDialog extends Dialog
implements WindowConstants, Accessible, RootPaneContainer,
TransferHandler.HasGetTransferHandler { … }
Object
AWT
Component
Container
JComponent Window
JOptionPane Dialog
JDialog
SWING
Declaração Funcionalidade
public JDialog( Frame owner, String title, boolean modal) Cria caixa de diálogo invisível, com a
janela pai, título e tipo de
funcionamento (true=modal ou
false=modeless) especificados.
public JDialog( Frame owner, String title ) Cria caixa de diálogo invisível e modeless,
com a janela pai e título especificados.
public JDialog( Frame owner, boolean modal) Cria caixa de diálogo invisível e sem
título, com janela pai e tipo de
funcionamento (true=modal ou
false=modeless) especificados.
▪ Próprios
Declaração Funcionalidade
Especifica o gestor de posicionamento do
public void setLayout(LayoutManager manager)
Content Pane.
public void setJMenuBar(JMenuBar menuBar) Especifica a barra de menus da caixa de diálogo.
Declaração Funcionalidade
public void setDefaultCloseOperation(int operation) Especifica operação que ocorrerá, por
omissão, quando utilizador inicia fecho da
▪ Exemplo: caixa de diálogo (botão close da moldura);
setDefaultCloseOperation(DO_NOTHING_ON_CLOSE) Operações à escolha:
DO_NOTHING_ON_CLOSE // Não faz nada
HIDE_ON_CLOSE // Esconde caixa
DISPOSE_ON_CLOSE // Fecha caixa
Por omissão, botão close executa a operação
HIDE_ON_CLOSE.
Transferência de Dados
Para a classe Dados,
responsável pelo
armazenamento de
dados da aplicaçã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
SWING AWT
Component
Container
is-a
JComponent Window
JComboBox
Frame Dialog
JList
JFrame JDialog
JTable JOptionPane
JLabel JFileChooser
▪ Imagem
▪ Texto e Imagem
▪ Declaração
public class JLabel extends JComponent
implements SwingConstants, Accessible { ... }
Object
Component
Container
JComponent
JLabel
Declaração Funcionalidade
public JLabel() Cria objeto
JLabel sem
▪ Exemplo imagem e sem
JLabel lbl = new JLabel(); texto.
public JLabel(String text) Cria objeto
JLabel com
▪ Exemplo Texto Simples texto
JLabel lblAguia = new JLabel("Águia"); especificado,
alinhado à
▪ Exemplo Texto Formatado
esquerda e
String texto = "<html>As aves de rapina são aves carnívoras que compartilham "+ centrado na
" <P> características semelhantes, bicos recurvados e " + vertical.
" <P> pontiagudos, garras fortes e visão de longo alcance." +
" <P> Exemplos:" +
"<UL>" +
" <LI>Águia" +
" <LI>Falcão" +
" <LI>Abutre" +
" <LI>Milhafre" +
"</UL></html>";
JLabel lblAvesRapina = new JLabel( texto );
lblAvesRapina.setBorder( BorderFactory.createTitledBorder( "Aves de Rapina" ) );
Nelson Freire (ISEP–DEI-PPROG 2016/17) 185/383
Classe JLabel Construtores 2/2
Declaração Funcionalidade
public JLabel( String text, int horizontalAlignment ) Cria objeto JLabel com
texto especificado,
▪ Exemplos: centrado na vertical e
JLabel lblAguia = new JLabel( "Águia", SwingConstants.RIGHT ); com alinhamento
JLabel lblAguia = new JLabel("Águia", JLabel.RIGHT ); horizontal especificado.
▪ Próprios (1/2)
Declaração Funcionalidade
public void setText(String text) Especifica texto.
▪ Ex: JLabel lblAguia = new JLabel();
lbl.setText("Águia");
public String getText() Retorna texto.
▪ Ex: String texto = lbl.getText();
public void setIcon( Icon defaultIcon ) Especifica imagem.
▪ Ex: lbl.setIcon(new ImageIcon("aguia.jpg") );
public void setIconTextGap(int iconTextGap) Especifica intervalo entre texto e imagem.
▪ Ex: lbl.setIconTextGap( 10 );
Declaração Funcionalidade
public void setVerticalAlignment( int alignment ) Especifica alinhamento vertical do
texto e imagem;
▪ Exemplo 1:
Opções de alinhamento:
JLabel lblAguia = new JLabel("Águia"); ▪ SwingConstants.CENTER
lblAguia.setVerticalAlignment( SwingConstants.TOP); ▪ SwingConstants.TOP
▪ SwingConstants.BOTTOM
▪ Exemplo 2:
▪ JLabel.CENTER
JLabel lblAguia = new JLabel("Águia");
▪ JLabel.TOP
lblAguia.setVerticalAlignment( JLabel.TOP ); ▪ JLabel.BOTTOM
public void setHorizontalAlignment( int alignment ) Especifica alinhamento horizontal
do texto e imagem;
▪ Exemplo 1:
Opções de alinhamento:
JLabel lblAguia = new JLabel("Águia"); ▪ SwingConstants.CENTER
lblAguia.setHorizontalAlignment( SwingConstants.LEFT ); ▪ SwingConstants.RIGHT
▪ SwingConstants.LEFT
▪ Exemplo 2:
▪ JLabel.CENTER
JLabel lblAguia = new JLabel("Águia");
▪ JLabel.RIGHT
lblAguia.setHorizontalAlignment( JLabel.LEFT ); ▪ JLabel.LEFT
▪ Código Incompleto
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/label.html
▪ Exemplos
▪ Menus
▪ Separador de grupos lógicos de itens de menus // separador horizontal
▪ Barra de Ferramentas
▪ Separador de Ferramentas // separador vertical
▪ Declaração
public class JSeparator extends JComponent
implements SwingConstants, Accessible { ... }
Object
Component
Container
JComponent
JSeparator
▪ Próprio
▪ Mais usado
Declaração Funcionalidade
public void setOrientation( int orientation ) Especifica orientação.
▪ Exemplo
JSeparator sp1 = new JSeparator ();
sp1.setOrientation( JSeparator.VERTICAL );
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/separator.html
▪ Constituída
▪ Células // cada célula – mostra um elemento dos dados.
▪ Colunas // cada coluna – mostra um tipo de dados (ex: “string”, inteiro, “checkbox”, …).
▪ Cabeçalho // contém nomes de colunas.
Cabeçalho
Célula Coluna
▪ Opcionalmente
▪ Dados
▪ Podem ser editados … pelo utilizador.
▪ Tabela Mostrada
▪ Dentro de um “Scroll Pane” // “Scroll Pane” serve de contentor de JTable
Nelson Freire (ISEP–DEI-PPROG 2016/17) 200/383
Tabela Arquitetura 1/2
▪ MVC (Model-View-Controller)
▪ Padrão de arquitetura de software
▪ Tabela constituída por 3 componentes:
▪ 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.
TableModel
é uma
interface
▪ Declaração
public class JTable extends JComponent
implements TableModelListener, Scrollable, TableColumnModelListener,
ListSelectionListener, CellEditorListener, Accessible,
RowSorterListener { ... }
Object
Component
Container
JComponent
JTable
public void setValueAt(Object aValue, int rowIndex, int Especifica o valor da célula especificada como aValue.
columnIndex);
public void addTableModelListener(TableModelListener l); Adiciona um listener à lista que é notificada sempre que ocorre uma
modificação do modelo de dados.
public void removeTableModelListener(TableModelListener l); Remove um listener da lista que é notificada sempre que ocorre uma
modificação do modelo de dados.
▪ Métodos implementados:
▪ Tipo de modificação
▪ Inserção, Eliminação ou Atualização
▪ public int getType()
▪ Retorna: TableModelEvent.INSERT, .DELETE ou .UPDATE
▪ Células da tabela modificadas
▪ Linhas
▪ public int getFirstRow()
▪ Retorno TableModelEvent.HEADER_ROW
▪ Modificação de nomes, tipos e ordem das colunas
▪ public int getLastRow()
▪ Colunas
▪ public int getColumn()
▪ Retorno TableModelEvent.ALLCOLUMNS
▪ Modificadas todas as colunas das linhas indicadas
Nelson Freire (ISEP–DEI-PPROG 2016/17) 214/383
Tabela Modelos de Dados 1/6
▪ Objetos de Classe
▪ Nativa // fornecida pelo Java
▪ Própria // criada pelo programador
▪ Classe Nativa
▪ DefaultTableModel
▪ Usada por omissão pela JTable
▪ Guarda dados num objeto da classe Vector
▪ Fácil de usar mas tem restrições
▪ Exemplos:
▪ Células apenas editáveis
▪ Dados tratados todos como Strings
▪ Ex: Boolean não visualizado numa “check box”
▪ Obriga colocação de todos os dados da tabela num array ou Vector
▪ Pode ser desadequado para algum dado
▪ Alternativa
▪ Criar classe própria
▪ Classe Própria
▪ Permite implementar os nossos modelos da tabela
▪ Herdada da classe AbstractTableModel
▪ Classe Abstrata
▪ Implementa a interface TableModel
▪ 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
SWING AWT
Component
Container
is-a
JComponent Window
Frame Dialog
JComboBox
JFrame JDialog
JList
JOptionPane
JTable
JFileChooser
▪ Declaração
public abstract class AbstractButton extends JComponent
implements ItemSelectable, SwingConstants { ... }
Object
Component
Container
JComponent
AbstractButton
Declaração Funcionalidade
public void setMnemonic(char mnemonic) Especifica tecla de atalho
▪ Exemplo:
btnCancelar.setMnemonic(KeyEvent.VK_C) ; // ALT + c
public void setDisplayedMnemonicIndex(int index) Especifica tecla de atalho
▪ Exemplo:
btnCancelar.setDisplayedMnemonicIndex (0) ; // ALT + c
public void setVerticalAlignment( int alignment ) Especifica alinhamento vertical do texto e
ícone;
Opções de alinhamento:
▪ SwingConstants.CENTER (por omissão)
▪ SwingConstants.TOP
▪ SwingConstants.BOTTOM
Declaração Funcionalidade
public void setVerticalTextPosition( int textPosition ) Especifica a posição vertical do texto
relativamente ao ícone;
▪ Exemplos:
Opções:
▪ SwingConstants.CENTER (por omissão)
▪ SwingConstants.TOP
▪ SwingConstants.BOTTOM
Declaração Funcionalidade
public void setIcon( Icon defaultIcon ) Especifica o ícone.
public void setDisabledIcon( Icon disabledIcon ) Especifica ícone para botão inibido.
▪ Exemplo:
btn.setDisabledIcon ( new ImageIcon("c:\\x.gif") );
public void setRolloverIcon( Icon rolloverIcon ) Especifica novo ícone à passagem do apontador
do rato.
▪ Exemplo:
btn.setRolloverIcon( new ImageIcon("c:\\tips.gif") );
public void setIconTextGap( int iconTextGap ) Especifica intervalo entre texto e ícone.
▪ Exemplo:
▪ Declaração
public abstract class JToggleButton extends AbstractButton
implements Accessible { ... }
Object
Component
Container
JComponent
AbstractButton
JToggleButton
▪ Desselecionado
JCheckBox JRadioButton
Declaração Funcionalidade
public JToggleButton() Cria botão visível e
▪ Exemplo: vazio.
JToggleButton tbt1 = new JToggleButton();
public JToggleButton( String text ) Cria botão visível
▪ Exemplo: com texto.
JToggleButton tbtCancelar = new JToggleButton("Cancelar");
public JToggleButton( Icon icon ) Cria botão visível
▪ Exemplo: com ícone.
JToggleButton tbtCancelar = new JToggleButton( new ImageIcon("x.gif"));
public JButton( String text, Icon icon ) Cria botão visível
▪ Exemplo: com ícone e texto.
Icon icon = new ImageIcon("x.gif");
JToggleButton tbtCancelar = new JToggleButton("Cancelar", icon );
JCheckBox JRadioButton
▪ Declaração
public class JButton extends AbstractButton
implements Accessible { ... }
Object
Component
Container
JComponent
AbstractButton
JButton
Declaração Funcionalidade
public JButton() Cria objeto
▪ Exemplo: JButton visível
vazio.
JButton btnCancelar = new JButton();
public JButton( String text ) Cria objeto
▪ Exemplo: JButton visível
com texto.
JButton btnCancelar = new JButton("Cancelar");
public JButton( Icon icon ) Cria objeto
▪ Exemplo: JButton visível
com ícone.
JButton btnCancelar = new JButton(new ImageIcon("x.gif"));
public JButton( String text, Icon icon ) Cria objeto
▪ Exemplo: JButton visível
com ícone e texto.
JButton btnCancelar = new JButton("Cancelar", new ImageIcon("x.gif"));
▪ Por omissão
▪ Botão é visível
Nelson Freire (ISEP–DEI-PPROG 2016/17) 231/383
Botão de
Comando Classe JButton
▪ Métodos
▪ Herdados
▪ Component
▪ Container
▪ JComponent
▪ AbstractButton
▪ Próprios
Declaração Funcionalidade
public void setText(String text) Especifica o texto (simples ou HTML).
public String getText() Retorna o texto.
public void setIcon( Icon defaultIcon ) Especifica o ícone.
public void setIconTextGap(int iconTextGap) Especifica o intervalo entre texto e ícone.
public ContadorGUI() {
super("Contador de Cliques");
criarComponentes();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
▪ Código Completo
Nelson Freire (ISEP–DEI-PPROG 2016/17) 233/383
Botão de
Comando Eventos 1/2
Declaração Funcionalidade
public void addActionListener( ActionListener l ) Regista objeto para tratar
evento do tipo Action.
▪ Exemplo:
JButton btn = new JButton("Cancelar");
// Classe TrataEvento implementa interface ActionListener
TrataEvento t = new TrataEvento();
btn.addActionListener( t );
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/button.html
▪ JTextArea
Container
▪ Pode aceitar múltiplas linhas de texto
▪ JPasswordField
JComponent Window
▪ Aceita só uma linha de texto
▪ Esconde texto introduzido
JTextComponent Frame
▪ JFormattedTextField
▪ Para entradas específicas
JTextArea JTextField JFrame
▪ Exemplos
▪ Datas e Endereços IP
JPasswordField JFormattedTextField
▪ Herdam Classe JTextComponent
▪ Classe abstrata
▪ Não instanciável
Object
Component
Container
JComponent Window
JTextComponent Frame
JPasswordField JFormattedTextField
▪ Declaração
public abstract class JTextComponent extends JComponent
implements Scrollable, Accessible { ... }
▪ Classe Abstrata
▪ Não Instanciável
Object
Component
Container
JComponent
JTextComponent
▪ Próprios
▪ Mais usados
Declaração Funcionalidade
public void setText( String t ) Especifica texto t para o componente;
setText(null) ou setText("") elimina texto do componente.
public String getText( ) Retorna texto contido no componente.
public void setEditable(boolean b) Especifica se o texto pode ou não ser editado.
JTextField
▪ Exemplo
▪ Declaração
public class JTextField extends JTextComponent
implements SwingConstants { ... }
Object
Component
Container
JComponent
JTextComponent
JTextField
▪ 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
Declaração Funcionalidade
public void addActionListener( ActionListener l ) Regista objeto para
tratar evento do tipo
▪ Exemplo: Action.
JTextField txt = new JTextField( 10 );
// Classe TrataEvento implementa interface ActionListener
TrataEvento t = new TrataEvento();
txt.addActionListener( t );
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/textfield.html
Barra de Menus
Sistema de Menus
▪ Constituído
▪ Barra de Menus
▪ Contém Menus Barra de Menus
▪ Contêm Menu
▪ Itens de Menu Item de Menu
▪ Separadores Separador de Itens
▪ Submenus
▪ Constituída
▪ Menus de nível superior
Barra de Menus
Abertura de um Menu
▪ Hierarquia
Object
Component
Container
JComponent
▪ Declaração
public class JMenuItem extends AbstractButton
implements Accessible, MenuElement { ... }
▪ Construtores
Declaração Funcionalidade
public JMenuItem( String text ) Constrói item de menu
▪ Ex: JMenuItem mitAcerca = new JMenuItem("Acerca"); com texto especificado.
Declaração Funcionalidade
public void setAccelerator(KeyStroke keyStroke) Especifica o acelerador
do item de menu;
▪ Exemplos:
JMenuItem mitAcerca = new JMenuItem("Acerca", 'A'); Acelerador é uma tecla
ou combinação de teclas
mitAcerca.setAccelerator( KeyStroke.getKeyStroke("ctrl A") ); que aciona o item de
… menu sem necessidade
mitAcerca.setAccelerator( KeyStroke.getKeyStroke("alt A") ); de navegar pelo sistema
… de menus.
mitAcerca.setAccelerator( KeyStroke.getKeyStroke('A') );
public void setEnabled(boolean b) Inibe/desinibe item de
▪ Ex: mitAcerca.setEnable(false); menu.
JMenu
▪ Declaração
public class JMenu extends JMenuItem
implements Accessible, MenuElement { ... }
▪ Construtores
Declaração Funcionalidade
public JMenu( String text ) Constrói menu com texto
especificado
▪ Exemplo:
JMenu mnuAjuda = new JMenu("Ajuda");
▪ Declaração
public class JMenuBar extends JComponent
implements Accessible, MenuElement { ... }
▪ Construtor
Declaração Funcionalidade
public JMenuBar( ) Constrói barra de menus.
▪ Exemplo:
JMenuBar mb = new JMenuBar();
▪ Próprio
▪ Mais usado
Declaração Funcionalidade
public JMenu add(JMenu c) Insere menu especificado no fim da barra
de menus.
▪ Exemplo
JMenuBar mb = new JMenuBar();
JMenu mnuAjuda = new JMenu("Ajuda");
mb.add( mnuAjuda );
Método de
Evento Action
do item Abrir
Método de
Evento Action
do item Fechar
Submenu:
Menu adicionado
a outro menu
Item de Submenu
▪ Itens de menu
▪ Têm de estar visíveis
Mnemónicas e Aceleradores
▪ Exemplos
JMenuItem itemCortar = new JMenuItem("Cortar");
itemCortar.setAccelerator( KeyStroke.getKeyStroke("ctrl X") ); // combinação CTRL+X
itemCortar.setAccelerator( KeyStroke.getKeyStroke("alt X") ); // combinação ALT+X
itemCortar.setAccelerator( KeyStroke.getKeyStroke('x') ); // x
▪ Classe keystroke
▪ Cada instância representa uma tecla
▪ Método
static Keystroke getKeyStroke( int keyCode )
▪ Cria instância KeyStroke
▪ Encapsula tecla premida correspondente a evento KEY_PRESSED
▪ Keycode
▪ Representa código virtual duma tecla
Nelson Freire (ISEP–DEI-PPROG 2016/17) 267/383
Menu Eventos 1/2
Tipos de Evento que Menu/Item podem Gerar Evento
Action Clique em menu/item
Componente adicionado a menu/item
Container
Componente removido de menu/item
Menu/item escondido
Menu/item mostrado
Component
Menu/item movido
Menu/item redimensionado
Menu/item adquire o foco
Focus
Menu/item perde o foco
Item Selecionado/desselecionado item
Tecla mantida premida
Key Tecla libertada
Tecla premida (toque)
Clique no rato
Rato entrou no menu/item
Rato saiu do menu/item
Botão do rato premido
Mouse
Botão do rato libertado
Rato movido
Rato arrastado (premido + movido)
Roda do rato movida
Nelson Freire (ISEP–DEI-PPROG 2016/17) 268/383
Menu Eventos 2/2
▪ Evento Action
▪ Iniciado por seleção de Menu ou Item de Menu através de
▪ Clique
▪ Teclado
▪ Tratamento
▪ Realizado
▪ Por objetos de classes que implementem o interface ActionListener
▪ Exemplo
▪ http://download.oracle.com/javase/tutorial/uiswing/components/menu.html
▪ http://www.faqs.org/docs/javap/c7/s5.html
▪ Declaração
public class JList<E> extends JComponent
implements Scrollable, Accessible { ... }
Object
Component
Container
JComponent
JList
▪ Tipo E
▪ Especifica tipo de elemento da caixa de listagem
Nelson Freire (ISEP–DEI-PPROG 2016/17) 274/383
Caixa de Listagem Classe JList 2/6
▪ Construtores
▪ Mais usados
Declaração Funcionalidade
public JList( ) Constrói uma caixa de listagem com um modelo de lista
▪ Ex: (AbstractListModel):
▪ Vazio
JList lstNomes = new JList(); ▪ Apenas pode ser lido
… ▪ Não é possível adicionar elementos ao
lstNomes.setModel( modelo ); modelo da lista.
Interesse:
▪ Especificar posteriormente o modelo de lista.
public JList(final E[] listData) Constrói uma caixa de listagem que mostra elementos
do array especificado.
Cria um modelo da lista contendo os elementos do
array e que apenas pode ser lido. Não é possível
adicionar/remover elementos do modelo da lista.
O modelo da lista referencia o array especificado.
Assim é possível alterar um elemento do modelo da
lista.
public JList(ListModel<E> dataModel) Constrói uma caixa de listagem que mostra os
elementos do modelo da lista especificado.
▪ 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 )
Exemplo:
…
JList lstNomes = new JList (modelo);
JScrollPane scrPane = new JScrollPane( lstNomes );
add(scrPane, BorderLayout.CENTER);
JList + JScrollPane
Declaração Funcionalidade
public void setSelectionMode(int selectionMode) Especifica modo de seleção de
elementos da lista
▪ Exemplo
▪ SINGLE_SELECTION
String elementos = "Ana", "Maria", "João"; ▪ SINGLE_INTERVAL_SELECTION
JList<String> lst = new JList( elementos ); ▪ MULTIPLE_INTERVAL_SELECTION
lst.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Declaração Funcionalidade
public int getSelectedIndex() Retorna índice do elemento selecionado /
menor índice no modo multi-seleção;
Retorna -1, sem elemento selecionado.
public int[] getSelectedIndices() Retorna array com os índices de todos os
elementos da lista selecionados, ordenados de
modo ascendente;
Retorna array vazio, sem qualquer elemento
selecionado.
public E getSelectedValue() Retorna elemento selecionado / com menor
índice no modo multi-seleção;
Retorna null, sem elemento selecionado.
public List<E> getSelectedValuesList() Retorna lista de elementos selecionados,
ordenados de modo ascendente dos seus
índices;
Retorna lista vazia, sem qualquer elemento
selecionado.
public void setVisibleRowCount(int visibleRowCount) Especifica o nº de elementos mostrados sem
recorrer ao scrolling.
Por omissão mostra 8 elementos.
Nelson Freire (ISEP–DEI-PPROG 2016/17) 278/383
Caixa de Listagem Classe JList 6/6
▪ Métodos Próprios (3/3)
Declaração Funcionalidade
public ListModel<E> getModel() Retorna o modelo da lista que guarda os
elementos da lista apresentados pelo
▪ Exemplo componente JList.
JList<String> lstDemo = new JList();
ListModel modeloLista = lstDemo.getModel();
public void setModel(ListModel<E> model) Especifica o modelo da lista que
representa o conteúdo da lista, notifica os
“property change listeners” e depois
limpa as seleções da lista.
▪ 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
ScrollPane
Para visualizar toda a lista
▪ http://download.oracle.com/javase/tutorial/uiswing/components/list.html
Lista
▪ Lista
▪ Permite ao utilizador
▪ Selecionar uma opção
(1) (2)
▪ Vantagem
▪ Minimização do espaço GUI ocupado
▪ Alternativa
▪ Com Botões de Opção
▪ Ocupa muito mais espaço GUI
▪ Declaração
public class JComboBox<E> extends JComponent
implements ItemSelectable,ListDataListener,ActionListener, Accessible { ... }
Object
Component
Container
JComponent
JComboBox
▪ Tipo E
▪ Especifica tipo de opção da caixa de combinação
Nelson Freire (ISEP–DEI-PPROG 2016/17) 292/383
Caixa de
Combinação Construtores
▪ Mais usados
Declaração Funcionalidade
public JComboBox( ) Constrói caixa de combinação
não-editável com uma lista de
▪ Exemplos opções vazia.
JComboBox cbMarcas = new JComboBox();
JComboBox<String> cbMarcas = new JComboBox();
▪ Próprios (1/3)
▪ Mais usados
Declaração Funcionalidade
public void setEditable(boolean aFlag) Especifica forma da caixa de combinação:
▪ Exemplo – caixa de combinação editável ▪ Editável;
JComboBox cb1 = new JComboBox( ); ▪ Não-Editável.
cb1.setEditable(true);
▪ Exemplo – caixa de combinação não-editável
JComboBox cb2 = new JComboBox( );
cb2.setEditable(false);
public void setMaximumRowCount(int count) Especifica nº máximo de opções visíveis
(comprimento máximo visível da lista);
▪ Exemplo
Se a quantidade total de opções exceder o valor
cb1. setMaximumRowCount(5); especificado, a lista mostra uma scrollbar.
Declaração Funcionalidade
public void addItem(E item) Adiciona opção à lista.
▪ Exemplo
JComboBox cbMarcas = new JComboBox( );
cbMarcas.addItem("Audi");
public void insertItemAt(E item, int index) Adiciona opção à lista, na posição index;
▪ Exemplo índices a partir de 0.
cbMarcas.insertItemAt("Alfa Romeo", 0);
public void removeItem(Object item) Remove opção especificada.
▪ Exemplo
cbMarcas.removeItem("Audi");
public void removeItemAt(int index) Remove opção na posição especificada.
Declaração Funcionalidade
public void setSelectedIndex(int index) Seleciona opção com índice especificado;
▪ Exemplo índice 0 seleciona 1ª opção da lista;
cbMarcas.setSelectedIndex(2); índice -1 não seleciona opção.
▪ http://docs.oracle.com/javase/tutorial/uiswing/components/combobox.html
▪ 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
▪ Tipos
▪ Hierarquia de Classes
▪ Gestores de Posicionamento
▪ BorderLayout
▪ FlowLayout
▪ GridLayout
▪ CardLayout
Gestores de Posicionamento
reposicionam componentes durante
redimensionamento da janela
Gestores de Posicionamento
colocam componentes no
contentor
Contentor de Componentes
▪ Nativos
▪ BorderLayout
▪ FlowLayout
Abordados nestes slides
▪ GridLayout
▪ CardLayout
▪ BoxLayout
▪ GridBagLayout
▪ GroupLayout
▪ SpringLayout
▪ Hierarquia de Classes
Object
package java.awt
is-a
LayoutManager2 implements
Serializable
is-a
LayoutManager package java.io
interfaces interface
▪ Interesse
▪ Permitir colocação precisa de componentes gráficos num contentor
▪ Numa posição específica
▪ Exemplo
Object
package java.awt
is-a
BorderLayout
is-a
package java.io
LayoutManager2
interfaces interface
Declaração Funcionalidade
public BorderLayout() Gestor posiciona componentes sem intervalos
entre eles.
public BorderLayout(int hgap, int vgap) Gestor posiciona componentes com intervalos
entre eles.
Intervalo horizontal = hgap píxeis
Intervalo vertical = vgap píxeis
▪ Exemplos de Uso
hgap
Declaração Funcionalidade
public void setHgap(int hgap) Indica o intervalo horizontal entre componentes.
Unidade de medida é o pixel.
public void setVgap(int vgap) Indica o intervalo vertical entre componentes.
Unidade de medida é o pixel.
▪ Exemplos de Uso
Declaração Funcionalidade
public static final String NORTH = "North"; Valor indica região Norte
public static final String SOUTH = "South"; Valor indica região Sul
public static final String EAST = "East"; Valor indica região Este
public static final String WEST = "West"; Valor indica região Oeste
public static final String CENTER = "Center"; Valor indica região Centro
▪ Exemplos de Uso
JPanel p = new JPanel( new BorderLayout() );
JLabel lbl1 = new JLabel("Norte");
JLabel lbl2 = new JLabel("Este");
p.add( lbl1, BorderLayout.NORTH );
p.add( lbl2, BorderLayout.EAST );
Centro
Painel
BorderLayout
Sul
Painel Gestor
FlowLayout
Número de Cliques: 0 BorderLayout
Label
Botão de Comando
public ContadorGUI() {
super("Contador de Cliques");
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA , JANELA_ALTURA );
setLocationRelativeTo(null);
setVisible(true);
}
}
JLabel
▪ Interesse
▪ Posicionar componentes gráficos num contentor
▪ Em linha
▪ Exemplo
▪ Alinhar botões de comando na horizontal
Object
FlowLayout
implements
LayoutManager Serializable
package java.io
interface interface
Declaração Funcionalidade
public static final int LEFT = 0; Valor indica que cada linha de componentes deverá ser
alinhada à esquerda.
public static final int CENTER = 1; Valor indica que cada linha de componentes deverá ser
alinhada ao centro.
public static final int RIGHT = 2; Valor indica que cada linha de componentes deverá ser
alinhada à direita.
▪ Exemplos de Uso
FlowLayout.LEFT
FlowLayout.CENTER
FlowLayout.RIGHT
Declaração Funcionalidade
public FlowLayout() Alinhamento de linhas centrado.
Intervalos horizontais e verticais entre
componentes e entre componentes e o
bordo de 5 píxeis.
public FlowLayout(int align) Alinhamento das linhas align.
Intervalos horizontais e verticais de 5 píxeis.
public FlowLayout(int align, int hgap, int vgap) Alinhamento das linhas align.
Intervalos horizontais e verticais de hgap e
vgap píxeis, respetivamente.
▪ Exemplos de Uso
FlowLayout f1 = new FlowLayout();
FlowLayout f2 = new FlowLayout( FlowLayout.LEFT);
FlowLayout f3 = new FlowLayout( FlowLayout.RIGHT);
FlowLayout f4 = new FlowLayout( FlowLayout.RIGHT, 20, 30 );
Declaração Funcionalidade
public void setAlignment(int align) Indica alinhamento align do gestor FlowLayout
public void setHgap(int hgap) Indica intervalo horizontal entre componentes e entre
componentes e bordo do contentor.
Unidade de medida é o pixel.
public void setVgap(int vgap) Indica intervalo vertical entre componentes e entre
componentes e bordo do contentor.
Unidade de medida é o pixel.
▪ Exemplos de Uso
FlowLayout f1 = new FlowLayout();
f1.setAlignment( FlowLayout.LEFT ); // alinhamento especificado por campo de classe LEFT
f1.setVgap( 10 );
f1.setHgap( 20 );
Centro
Painel
BorderLayout
Painel
Sul
FlowLayout
Painel Gestor
Flowlayout
Número de Cliques: 0 BorderLayout
Label
Botão de Comando
Contentor
GridLayout
▪ Posicionamento de componentes
▪ Colocados linha-a-linha (1ª, depois 2ª, etc.)
▪ Exemplo Intervalo entre Componentes
JPanel pane = new JPanel( g );
pane.add( new JButton("Um") ); // ocupará posição (1,1)
pane.add( new JButton("Dois") ); // ocupará posição (1,2)
...
Nelson Freire (ISEP–DEI-PPROG 2016/17) 332/383
Gestores
Posicionamento Gestores GridLayout 3/6
▪ Definição da Grid (1/3)
▪ Nº de Linhas = Nº de Colunas = 0 // Ex: GridLayout g = new GridLayout(0,0);
▪ Erro de execução
▪ Nº de Linhas > 0
▪ Nº de colunas é irrelevante // pode ser qualquer nº
▪ Gestor maximiza uso de linhas
▪ Exemplos
▪ Nº de linhas = 1: todos os componentes colocados na mesma linha
GridLayout g = new GridLayout(1,0);
GridLayout g = new GridLayout(1,5);
(1,0)
(1,5)
▪ Nº de linhas = 5
GridLayout g = new GridLayout(5,0);
GridLayout g = new GridLayout(5,3); (5,0)
(5,3)
(9,0)
(9,3)
(9,5)
▪ 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);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(JANELA_LARGURA, JANELA_ALTURA);
setLocationRelativeTo(null);
setVisible(true);
}
}
Contentor CardLayout
North
Contentor
Contentor
Center BorderLayout
GridLayout
Contentor Contentores
GridLayout CardLayout
FlowLayout
▪ 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
▪ Tipos de Evento
▪ Classes de Evento
▪ Noção
▪ Hierarquia
Eventos
Sistema Operativo
▪ Sistema operativo que suporta aplicações GUIs
▪ Monitoriza constantemente eventos
▪ Reporta esses eventos às aplicações em execução
▪ Cada aplicação decide a forma de responder a
esses eventos
▪ Faz a captura e o tratamento dos eventos
Aplicação GUI é orientada por Eventos
▪ Quais são os eventos que aplicação GUI pode
manipular?
Object Packages:
• java.util ( EventObject )
• Java.lang ( Object )
EventObject
AWTEvent
KeyEvent MouseEvent
EventListener
ContainerListener TextListener
KeyListener MouseWheelListener
FocusListener MouseListener
ActionListener WindowListener
▪ Especificam
▪ Métodos de evento para tratar todos os eventos do tipo correspondente // slides seguintes
Nelson Freire (ISEP–DEI-PPROG 2016/17) 351/383
Eventos Métodos de Evento 1/2
Evento Classe de Evento Interface Trata Evento Método de Evento
Clique num botão de comando
Clique num item de menu
ActionEvent ActionListener actionPerformed(ActionEvent e)
Termina edição de campo de texto
Selecionado item caixa combinação
Item seleccionado/desseleccionado ItemEvent ItemListener itemStateChanged(ItemEvent e)
Componente escondido componentHidden(ComponentEvent e)
Componente mostrado componentShown(ComponentEvent e)
ComponentEvent ComponentListener
Componente movido componentMoved(ComponentEvent e)
Componente redimensionado componentResized(ComponentEvent e)
Componente adquire foco focusGained(FocusEvent e)
FocusEvent FocusListener
Componente perde foco focusLost(FocusEvent e)
Tecla mantida premida keyPressed(KeyEvent e)
Tecla libertada KeyEvent KeyListener keyReleased(KeyEvent e)
Tecla premida keyTyped(KeyEvent e)
Clique no rato mouseClicked(MouseEvent e)
Rato entrou no componente mouseEntered(MouseEvent e)
Rato saiu do componente MouseListener mouseExited(MouseEvent e)
Botão do rato premido mousePressed(MouseEvent e)
MouseEvent
Botão do rato libertado mouseReleased(MouseEvent e)
Rato movido mouseMoved(MouseEvent e)
MouseMotionListener
Rato arrastado (movido + premido) mouseDragged(MouseEvent e)
Roda do rato movida MouseWheelListener mouseWheelMoved(MouseWheelEvent e)
Interface
Evento Classe de Evento Método de Evento
Trata Evento
Componente adicionado componentAdded(ContainerEvent e)
ContainerEvent ContainerListener
Componente removido componentRemoved(ContainerEvent e)
Scrollbar movido AdjustmentEvent AdjustmentListener adjutmentValue(AdjustmentEvent e)
Texto alterado TextEvent TextListener textValueChanged(TextEvent e)
Janela abriu windowOpened(WindowEvent e)
Janela fechou windowClosed(WindowEvent e)
Janela ficou activa windowActivated(WindowEvent e)
Janela ficou inactiva WindowEvent WindowListener windowDeactivated(WindowEvente)
Janela ficou minimizada windowIconified(WindowEvent e)
Janela restaurada (tamanho original) windowDeiconified(WindowEvent e)
Utilizador quer fechar Janela windowClosing(WindowEvent e)
▪ Tratamento de Eventos
▪ Classes Adapter
Captura de Eventos
Eventos
Sistema Operativo
Evento
Gera
comunicado a Objeto Trata Evento
Botão de Comando Evento
Objeto Trata Evento executa
acionado tipo
registado Método de Evento
Action
no Botão de Comando
Método de Evento
do
Objeto Trata Evento
Método de Evento
do
Objeto Trata Evento
▪ Trata Evento // Trata o evento após notificação recebida num objeto Evento
// Podem existir múltiplos
Evento Trata
Evento
Evento Trata
Evento
Trata
Evento Evento
Implementa
Evento Trata
Evento
Evento Implementa
Trata
Informação Evento
sobre o Evento
Parâmetro e
• Passa para dentro do método o objeto
Evento gerado pela Fonte de Evento
▪ Métodos (mais usados)
Método Obs
public Object getSource() • Retorna o objeto Fonte do Evento
• Permite a um método de evento processar diferentes fontes
• Exemplo: e.getSource() • Exemplo: e.getSource() == btnSair
public String getActionCommand() • Retorna o título do comando associado a esta ação
• Permite identificar a ação pretendida
• Só disponível em eventos do tipo Action
• Exemplo: e.getActionCommand(); • Exemplo: retorna o título do botão Sair
Nelson Freire (ISEP–DEI-PPROG 2016/17) 368/383
Eventos
Manipulação Objeto Evento 4/5
Método de Evento
trata eventos do tipo
Action gerados por
duas Fontes de
Evento diferentes
▪ Java fornece Classe Adapter para cada Interface Trata Evento com múltiplos métodos especificados
▪ Exemplos
▪ WindowAdapter
▪ MouseAdapter
Nelson Freire (ISEP–DEI-PPROG 2016/17) 376/383
Eventos
Manipulação Classes Adapter 2/2
▪ Usadas para definir Classes Trata Evento
▪ Têm de ser herdadas da classe Adapter
▪ Reescrevem apenas métodos de evento necessários
▪ Exemplos
JLabel
▪ 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
▪ 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