Programação Visual em Java
1
Sumário






Introdução
Contentores
Componentes
Layouts
Eventos
Exemplos
2
Introdução

Interfaces gráficas são compostas por:

Contentores


Componentes


botões, menus, caixas de texto
layouts


Janelas, painéis
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)





Infra-estrutura mínima de interface gráfica
É implementada sobre componentes nativos do
sistema operativo.
Limitado em recurso
Diferentes plataformas possuem aparência
diferente
Bugs e incompatibilidades entre plataformas
4
Introdução

JFC (Java Foundation Classes)




Implementado inteiramente em Java.
Oferece uma interface muito mais rica e componentes
mais flexíveis.
É preciso importar java.awt e java.swing para usar a JFC
suporta:




definição de botões, menus, etc
desenho 2D (java.awt.geom)
funcionalidades drag-and-drop (java.awt.dnd)
API com acessibilidade a usuários (javax.accessibility
5
Histórico

Java 1.0



Java 1.1


Interface executa de forma medíocre em todas as
plataformas
Modelo de eventos arcaico
Melhora o modelo de eventos por delegação
usando o design pattern Observer
Java 1.2


JFC/Swing substitui totalmente os componentes
AWT
Mantém e estende a interface de eventos e layout
6
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
7
contentores
Aplicações
8

Hierarquia de classes:
9
Classes Contentoras

Frame (AWT) e JFrame (Swing)



Applet e JApplet



Servem de base para qualquer aplicação gráfica
possui uma barra de título e características para receber
menus e outros componentes.
Tipo de Panel (JPanel) que serve de base para aplicações
que se executam dentro de browsers
Pode ser inserido dentro de uma página HTML e ocupar o
contexto gráfico do browser
Dialog e JDialog

Usada para definir janelas de diálogo para entrada de dados
10
Aplicações visuais

Aplicações gráficas em Java:

Applets:


Aplicações stand alone


iniciados pelo sistema operativo
Capturam eventos do sistema


componentes iniciados via browser
Rato, teclado, . . .
Desenham-se sobre um contexto gráfico fornecido pelo

Sistema operativo


Aplicação gráfica
Browser


Fornece os recursos gráficos
Controla o seu ciclo de vida


Inicio, fim, . . .
Possuem restrições de segurança
11
Ola windows
Programa OlaWindows
public class OlaWindows extends javax.swing.JFrame{
public OlaWindows(String nome) {
super(nome);
this.setSize(400,350);
this.setVisible(true);
}
public static void main(String[] args) {
new OlaWindows(" Ola Windows");
}
}
12
Ola Applet
Programa OlaApplet
public class OlaApplet extends JApplet{
public void paint(Graphics g){
g.drawString("Ola Applet",10,100);
}
}
Página HTML
<html>
<body>
<APPLET code="OlaApplet.class" width=350 height=200>
</APPLET>
</body>
</html>
13
Applets: ciclo de vida

Não têm função main
14
Ola Applet
Programa OlaApplet
public class OlaApplet extends JApplet{
StringBuffer msg ;
public void init(){
msg = new StringBuffer();
msg.append("Iniciando o Applet . . .");
}
public void start(){
msg.append("Começando o Applet . . .");
}
public void stop(){
msg.append("Parando o Applet . . .");
}
public void destroy(){
msg.append("Destruindo o Applet . . .");
}
public void paint(Graphics g){
g.drawString(msg.toString(),10,100);
}
}
15
Passagem de parâmetros
Página HTML
<html>
<body>
<APPLET code="OlaApplet.class" width=350 height=200>
<param name = "texto" value="isto é um parametro">
</APPLET>
</body>
</html>
Programa OlaApplet
public class OlaApplet extends JApplet{
public void init(){
msg = new StringBuffer();
msg.append("Iniciando o Applet . . .");
String parametro1 = getParameter("texto");
msg.append("
" + parametro1);
}
}
16
Restrições dos applets
(sandbox)







Não pode carregar bibliotecas externas
Não pode ler ou escrever arquivos na máquina cliente
Não pode fazer ligações de rede a não ser para a máquina de
onde veio
Não pode iniciar a execução de nenhum programa na máquina
do cliente
Não tem acesso à maior parte das propriedades do sistema
Janelas abertas têm aviso de segurança
Várias restrições podem ser flexibilizadas se o applet for
assinado
17
Vantagens / desvantagens dos applets

Desvantagens




Restrições de segurança
Tempo de download
Incompatibilidade com browsers
Vantagens





Facilidade de realizar comunicação em rede
Possibilidade de abrir janelas externas
Capacidade de estender o browser em recursos de
segurança, protocolos de rede, capacidade gráfica
Aplicação sempre atualizada
Capacidade de interagir com a página via JavaScript
18
Componentes
objectos
19
http://java.sun.com/docs/books/tutorial/uiswing/c
omponents/components.html
20
Componentes







Bottons
ComboBox
List
Slidder
TextField
Label
ProgressBar
21
Adicionar Componentes
Container pane = this.getContentPane();
pane.add( new Button("ola"));
22
Contentores






Panel
ScrollPane
SplitPane
TabbedPane
ToolBar
InternalFrame
23
layouts
Modos de visualização
24
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 flexiveis para o programador
Vários layoutManager
Possibilidade de escrever novos layoutManager
25
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"));
26
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
JPanel c =new JPanel();
c .setLayout(new GridLayout(2,2));
c.add(new JButton(”um"));
c.add(new JTextField(5));
c.add(new JButton("dois"));
c.add(new JButton("três"));
27
BorderLayout

Divide um contentor em cinco
regiões:






Quando se adiciona um
componente, é necessário
especificar em qual das áreas
ele deve ser adicionado.


BorderLayout.CENTER
BorderLayout.NORTH
BorderLayout.EAST
BorderLayout.SOUTH
BorderLayout.WEST
Ex.: add(butOK,
BorderLayout.WEST);
O Componente ocupa todo o
espaço!

Cada região contém apenas
um componente
JPanel c =new JPanel(new
BorderLayout());
JButton b1=new JButton("1");
c.add(b1,BorderLayout.NORTH);
JButton b2=new JButton("2");
c.add(b2,BorderLayout.EAST);
JButton b3=new JButton("3");
c.add(b3,BorderLayout.SOUTH);
JButton b4=new JButton("4");
c.add(b4,BorderLayout.WEST);
JButton b5=new JButton("5");
c.add(b5,BorderLayout.CENTER);
28
BoxLayout


Respeita o tamanho
preferido dos
componentes
Coloca os componentes
numa linha ou coluna.


BoxLayout.X_AXIS para
componentes em linha
BoxLayout.Y_AXIS para
componentes em coluna
JPanel c =new JPanel();
c .setLayout(new
BoxLayout(c,BoxLayout.Y_AXIS));
c.add(new JButton(”um"));
c.add(new JButton(“dois”));
c.add(new JButton(”três"));
c.add(new JButton(”quatro"));
29
CardLayout



Comporta-se como uma
pilha,
Só o objecto que estiver
no topo é visível.
Métodos:





first(Container)
last(Container)
next(Container)
previous(Container)
show(Container, String)
30
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);
31
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));
32
Eventos
Janelas em acção
33
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 objectos de eventos


java.util.EventObject
Listeners
34
Eventos

Fontes, Eventos, Ouvintes
35
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 eventoOcorreu(EventObject evento) {
Object fonte = evento.getSource();
...
}
Ouvintes precisam ser registrados nas fontes

Quando ocorre um evento, um método de todos os ouvintes
registrados é chamado e evento é passado como
argumento

button.addActionListener(ouvinte1);
36
Tipos de Eventos

java.awt.event









ActionEvent (fonte: componentes de ação)
MouseEvent (fonte: componentes afectados pelo rato)
ItemEvent (fonte: checkboxes e similares)
AdjustmentEvent (fonte: scrollbars)
TextEvent (fonte: componentes de texto)
WindowEvent (fonte: janelas)
FocusEvent (fonte: componentes em geral)
KeyEvent (fonte: componentes afectados pelo teclado)
...
37
Interface de Eventos
38
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
39
Eventos

Exemplo:
JButton button = new JButton("Fonte");
ActionListener ouvinte1 = new OuvinteDoBotao();
MouseListener ouvinte2 = new OuvinteDeCliques();
button.addActionListener(ouvinte1);
button.addMouseListener(ouvinte2);

O mesmo objeto que é fonte às vezes também é
listener, se implementar as interfaces

É necessário registrar a fonte ao listener

o objeto não adivinha que ele mesmo tem que capturar seus
eventos
this.addWindowListener(this);
40
Exemplo
public class NewJFrame extends javax.swing.JFrame {
public NewJFrame() {
botao = new javax.swing.JButton();
botao.setText("click");
botao.addActionListener(
new java.awt.event.ActionListener() {
public void
actionPerformed(java.awt.event.ActionEvent evt) {
botaoActionPerformed(evt); }
});
private void botaoActionPerformed(ActionEvent evt) {
JOptionPane.showMessageDialog(this,"Respondi " +
evt.getSource());
}
}
41
Fim
42
Download

ppt