Você está na página 1de 44

Componentes Visuais

Programação de Computadores I

Prof. MSc. Diovanni Araujo


diovanni@ufpa.br
O QUE SERÁ VISTO

 Introdução
 Contentores
 Componentes
 Layouts
 Eventos
 Exemplos

2
INTRODUÇÃO
 Interfaces gráficas são compostas por:
– Contentores
• Janelas, painéis
– Componentes
• botões, menus, caixas de texto
– layouts
• Disposição dos componentes nos contentores
– Eventos
• Rato, teclado, sistema operativo

3
INTRODUÇÃO
 (Graphical User Interface - Interface
Gráfica do Utilizador) :
– AWT (Abstract Window Toolkit)
• Infraestrutura mínima de interface gráfica
• É implementada sobre componentes nativos do
sistema operacional.
• Limitado em recurso gráficos
• Diferentes plataformas (Win, Linux e Mac)
possuem aparência diferentes
• Bugs e incompatibilidades entre plataformas
–

4
HISTÓRICO
 Java 1.0
– Interface executa de forma medíocre em todas as
plataformas
– Modelo de eventos arcaico
 Java 1.1
– Melhora o modelo de eventos por delegação usando o
design pattern Observer
 Java 1.2
– Swing substitui totalmente os componentes AWT
– Mantém e estende a interface de eventos e layout

5
COMPONENTES
 Todos os elementos de uma aplicação são componentes
 Principais métodos (chamados pelo sistema):
– void paint (java.awt.Graphics g)
– void repaint()
– void update (java.awt.Graphics g)
 Outros métodos importantes:
– getSize() e setSize ()
– getLocation e setLocation
– getForeground e setForeground
– getFont e setFont
– setEnable
– setVisible

6
CONTENTORES (CONTAINER)
CLASSES CONTENTORAS
 Frame (AWT) e JFrame (Swing)
– Servem de base para qualquer aplicação gráfica
– possui uma barra de título e características para receber menus e
outros componentes.
 Dialog e JDialog
– Usada para definir janelas de diálogo para entrada de dados

8
Criando nosso frame....

9
Criando nosso Dialog

10
COMPONENTES
Componentes

• Bottons
• ComboBox
• List
• Slidder
• TextField
• Label
• ProgressBar

12
Adicionar Componentes

Container pane = this.getContentPane();


pane.add( new Button("ola"));
13
Contentores

• Panel
• ScrollPane
• SplitPane
• TabbedPane
• ToolBar
• InternalFrame

14
LAYOUTS
 Filosofia da linguagem JAVA
– programas portáveis
– interface adaptável.
 Localização dos Componentes
– não é indicada por um par ordenado (x,y)
• C++ builder
– Gestor de Apresentação
• LayoutManager.
– Adapatação automática dos componentes
» Pouco flexíveis para o programador
– Vários layoutManager
– Possibilidade de escrever novos layoutManager

18
FLOWLAYOUT

 Coloca os componentes
em fila da esquerda
superior do contentor
para a direita.
 Respeita o tamanho
preferido dos
componentes
 É o padrão do JPanel. JPanel c =new JPanel();
c.add(new JButton("1"));
c.add(new JTextField(9));
c.add(new JButton("dois"));
c.add(new JButton("três"));
19
GRIDLAYOUT

 Divide o contentor em linhas


e colunas.
 Permite definir uma matriz de
células onde são colocados os
componentes.
 Coloca os componentes da
esquerda para a direita, de
cima para baixo.
 Todos os componentes terão
o mesmo tamanho.
– Não respeita o tamanho
original dos componentes

20
BORDERLAYOUT
 Divide um contentor em cinco
regiões:
– BorderLayout.CENTER
– BorderLayout.NORTH {Norte]
– BorderLayout.EAST [Leste]
– BorderLayout.SOUTH [Sul]
– BorderLayout.WEST [Oeste]
 Quando se adiciona um
componente, é necessário
especificar em qual das áreas ele
deve ser adicionado.
– Ex.: add(butOK,
BorderLayout.WEST);
 O Componente ocupa todo o
espaço!
– Cada região contém apenas um
componente

22
BORDERLAYOUT

23
BOXLAYOUT

 Respeita o tamanho
preferido dos
componentes
JPanel c =new JPanel();
 Coloca os componentes c .setLayout(new BoxLayout(c,BoxLayout.Y_AXIS));
numa linha ou coluna. c.add(new JButton(”um"));
– BoxLayout.X_AXIS para c.add(new JButton(“dois”));
componentes em linha c.add(new JButton(”três"));
c.add(new JButton(”quatro"));
– BoxLayout.Y_AXIS para
componentes em coluna

24
CardLayout

• Comporta-se como uma


pilha,
• Só o objeto que estiver no
topo é visível.
• Métodos:
– first(Container)
– last(Container)
– next(Container)
– previous(Container)
– show(Container, String)

25
NULL LAYOUT

 Layout null
– Utilizado para “desligar” o gestor de layout
• pane.setLayout (null);
– A partir desta instrução é necessário a definição
da posição e o do tamanho de cada componente
• componente.setBounds (x, y, larg, alt);

26
LAYOUTS COMPOSTOS

Container caixa = janela.getContentPane();


JPanel painel1 =new JPanel();
JPanel painel2 =new JPanel();
caixa.setLayout(new GridLayout(2,1));
painel1.setLayout(new GridLayout(2,2));
painel2.setLayout(new FlowLayout(FlowLayout.CENTER));

27
Eventos

Janelas em Ação

28
EVENTOS

 Realizam o trabalho útil numa aplicação


 Desencadeiam a execução de métodos
– Dependem do evento
– Dependem do componente
 São geridos por objetos de eventos
– java.util.EventObject
– Listeners

29
EVENTOS

 Fontes, Eventos, Ouvintes

30
JAVA.UTIL.EVENTOBJECT

 Todo o evento tem um objeto que é sua fonte


– Object fonte = evento.getSource();
 Métodos de ouvintes (listeners) que desejam tratar
eventos, recebem eventos como argumento
• public void ouvinte1(EventObject evento) {
• Object fonte = evento.getSource();
• ...
• }
 Ouvintes precisam ser registrados nas fontes
– button.addActionListener(ouvinte1);

31
Classe Interna e Anônima
TIPOS DE EVENTOS
 java.awt.event
– ActionEvent (fonte: componentes de ação)
– MouseEvent (fonte: componentes afectados pelo mouse)
– ItemEvent (fonte: checkboxes e similares)
– AdjustmentEvent (fonte: scrollbars)
– TextEvent (fonte: componentes de texto)
– WindowEvent (fonte: janelas)
– FocusEvent (fonte: componentes em geral)
– KeyEvent (fonte: componentes afetados pelo teclado)
– ...

34
INTERFACE DE EVENTOS

35
ADAPTERS
 Alguns listeners possuem uma classe Adapter que
implementa todos os métodos, sem instruções
– Implementação vazia: {}
– Só existe para listeners que têm mais de um método
 São úteis quando um Ouvinte precisa implementar
apenas um dos vários métodos de um Listener
– Pode sobrepor a implementação desejada do método do
Adapter e não precisa se preocupar com os outros
– Não são úteis em ouvintes que já estendem outras classes
ou quando implementam diferentes listeners
• Eliminação de métodos
 O nome do adapter é semelhante ao do Listener
– MouseListener: MouseAdapter
– WindowListener: WindowAdapter

36
JTABLE

 Javax.swing.table
 Flexível
 Aceita edição de dados, outros componentes,
reorganização de colunas, drag and drop,
ordenação, etc.
 Precisa de um TableModel, que representa os
dados a serem exibidos.
JTABLE
TABLEMODEL
 Responsável por devolver para a tabela os dados
necessários para exibição. Há implementações com
Vectors ou Object[][]. Ou o que é mais comum,
podemos criar nosso próprio estendendo da
classe AbstractTableModel.
 Essa classe tem três métodos abstratos que somos
obrigados a implementar:
– getColumnCount - devolve a quantidade de colunas
– getRowCount - devolve a quantidade de linhas
– getValueAt(row, column) - dada uma linha e uma coluna
devolve o valor correspondente.
SETMODEL

Método para Editar Nome das Colunas:


OBRIGADO!
Dúvidas?

Você também pode gostar