Programação Visual em Java

Propaganda
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
ProgramaOlaWindows
OlaWindows
public
public class
class OlaWindows
OlaWindows extends
extends javax.swing.JFrame{
javax.swing.JFrame{
public
public OlaWindows(String
OlaWindows(String nome)
nome) {{
super(nome
);
super(nome);
this.setSize(400,350);
this.setSize(400,350);
this.setVisible(true
);
this.setVisible(true);
}}
public
] args
) {{
public static
static void
void main(String[
main(String[]
args)
new
" Ola
new OlaWindows(
OlaWindows("
Ola Windows");
Windows");
}}
}}
12
Ola Applet
Programa
ProgramaOlaApplet
OlaApplet
public
public class
class OlaApplet
OlaApplet extends
extends JApplet{
JApplet{
}}
public
public void
void paint(Graphics
paint(Graphics g){
g){
g.drawString(
"
Ola
Applet
",10,100);
g.drawString("Ola Applet",10,100);
}}
Página
PáginaHTML
HTML
<<html>
html>
<<body>
body>
<APPLET
"OlaApplet.class
<APPLET code=
code="
OlaApplet.class"" width=350
width=350 height=200>
height=200>
</APPLET>
</APPLET>
</
body
>
</body>
</
html>
</html>
13
Applets: ciclo de vida
„
Não têm função main
14
Ola Applet
Programa
ProgramaOlaApplet
OlaApplet
public
public class
class OlaApplet
OlaApplet extends
extends JApplet{
JApplet{
StringBuffer
msg
;
StringBuffer msg ;
public
){
public void
void init(
init(){
msg
);
msg == new
new StringBuffer(
StringBuffer();
msg.append(
"Iniciando oo Applet
msg.append("Iniciando
Applet .. .. .");
.");
}}
public
){
public void
void start(
start(){
msg.append(
"Começando oo Applet
msg.append("Começando
Applet .. .. .");
.");
}}
public
){
public void
void stop(
stop(){
msg.append(
"Parando oo Applet
msg.append("Parando
Applet .. .. .");
.");
}}
public
){
public void
void destroy(
destroy(){
msg.append(
"Destruindo oo Applet
msg.append("Destruindo
Applet .. .. .");
.");
}}
public
public void
void paint(Graphics
paint(Graphics g){
g){
g.drawString(msg.toString(
),10,100);
g.drawString(msg.toString(),10,100);
}}
}}
15
Passagem de parâmetros
Página
PáginaHTML
HTML
<<html>
html>
<<body>
body>
<APPLET
"OlaApplet.class" width=350
<APPLET code=
code="OlaApplet.class"
width=350 height=200>
height=200>
<param
"isto éé um
">
<param name
name == "texto"
"texto" value=
value="isto
um parametro
parametro">
</APPLET>
</APPLET>
</
body
>
</body>
</
html>
</html>
Programa
ProgramaOlaApplet
OlaApplet
public
public class
class OlaApplet
OlaApplet extends
extends JApplet{
JApplet{
public
void
init(
){
public void init(){
msg
);
msg == new
new StringBuffer(
StringBuffer();
msg.append(
"Iniciando oo Applet
msg.append("Iniciando
Applet .. .. .");
.");
String
"texto");
String parametro1
parametro1 == getParameter(
getParameter("texto");
}}
}}
msg.append(
"
msg.append("
"" ++ parametro1);
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
);
JPanel cc =new
=new JPanel(
JPanel();
c.add(new
"1"));
c.add(new JButton(
JButton("1"));
c.add(new
c.add(new JTextField(9));
JTextField(9));
c.add(new
"dois"));
c.add(new JButton(
JButton("dois"));
c.add(new
"três"));
c.add(new JButton(
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
);
JPanel cc =new
=new JPanel(
JPanel();
cc ..setLayout(new
setLayout(new GridLayout(2,2));
GridLayout(2,2));
c.add(new
”um"));
c.add(new JButton(
JButton(”um"));
c.add(new
c.add(new JTextField(5));
JTextField(5));
c.add(new
"dois"));
c.add(new JButton(
JButton("dois"));
c.add(new
"três"));
c.add(new JButton(
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
JPanel cc =new
=new JPanel(new
JPanel(new
BorderLayout(
));
BorderLayout());
JButton
"1");
JButton b1=new
b1=new JButton(
JButton("1");
c.add(b1,BorderLayout.NORTH);
c.add(b1,BorderLayout.NORTH);
JButton
"2");
JButton b2=new
b2=new JButton(
JButton("2");
c.add(b2,BorderLayout.EAST);
c.add(b2,BorderLayout.EAST);
JButton
"3");
JButton b3=new
b3=new JButton(
JButton("3");
c.add(b3,BorderLayout.SOUTH);
c.add(b3,BorderLayout.SOUTH);
JButton
"4");
JButton b4=new
b4=new JButton(
JButton("4");
c.add(b4,BorderLayout.WEST);
c.add(b4,BorderLayout.WEST);
JButton
"5");
JButton b5=new
b5=new JButton(
JButton("5");
c.add(b5,BorderLayout.CENTER);
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
);
JPanel cc =new
=new JPanel(
JPanel();
cc ..setLayout(new
setLayout(new
BoxLayout(c,BoxLayout.Y_AXIS
));
BoxLayout(c,BoxLayout.Y_AXIS));
c.add(new
”um"));
c.add(new JButton(
JButton(”um"));
c.add(new
“dois”));
c.add(new JButton(
JButton(“dois”));
c.add(new
”três"));
c.add(new JButton(
JButton(”três"));
c.add(new
”quatro"));
c.add(new JButton(
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
);
Container caixa
caixa == janela.getContentPane(
janela.getContentPane();
JPanel
);
JPanel painel1
painel1 =new
=new JPanel(
JPanel();
JPanel
);
JPanel painel2
painel2 =new
=new JPanel(
JPanel();
caixa.setLayout(new
caixa.setLayout(new GridLayout(2,1));
GridLayout(2,1));
painel1.setLayout(new
painel1.setLayout(new GridLayout(2,2));
GridLayout(2,2));
painel2.setLayout(new
painel2.setLayout(new
FlowLayout(FlowLayout.CENTER
));
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
public class
class NewJFrame
NewJFrame extends
extends javax.swing.JFrame
javax.swing.JFrame {{
public
) {{
public NewJFrame(
NewJFrame()
botao
);
botao == new
new javax.swing.JButton(
javax.swing.JButton();
botao.setText(
"click");
botao.setText("click");
botao.addActionListener(
botao.addActionListener(
new
) {{
new java.awt.event.ActionListener(
java.awt.event.ActionListener()
public
public void
void
actionPerformed(java.awt.event.ActionEvent
) {{
actionPerformed(java.awt.event.ActionEvent evt
evt)
botaoActionPerformed(evt
); }}
botaoActionPerformed(evt);
});
});
private
) {{
private void
void botaoActionPerformed(ActionEvent
botaoActionPerformed(ActionEvent evt
evt)
JOptionPane.showMessageDialog(this
,"Respondi "" ++
JOptionPane.showMessageDialog(this,"Respondi
evt.getSource(
));
evt.getSource());
}}
}}
41
Fim
42
Download