Upload
ryu
View
46
Download
0
Embed Size (px)
DESCRIPTION
Programação Visual em Java. Sumário. Introdução Contentores Componentes Layouts Eventos Exemplos. 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 - PowerPoint PPT Presentation
Citation preview
1
Programação Visual em Java
2
Sumário
Introdução Contentores Componentes Layouts Eventos Exemplos
3
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
4
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
5
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
6
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 JFC/Swing substitui totalmente os
componentes AWT Mantém e estende a interface de eventos e
layout
7
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
8
contentores
Aplicações
9
Hierarquia de classes:
10
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. Applet e JApplet
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
11
Aplicações visuais Aplicações gráficas em Java:
Applets: componentes iniciados via browser
Aplicações stand alone iniciados pelo sistema operativo
Capturam eventos do sistema 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
12
Ola windows
Programa OlaWindowsPrograma OlaWindows
public class OlaWindows extends javax.swing.JFrame{public class OlaWindows extends javax.swing.JFrame{ public OlaWindows(String nome) {public OlaWindows(String nome) {
super(nome);super(nome);this.setSize(400,350);this.setSize(400,350);this.setVisible(true);this.setVisible(true);
}}public static void main(String[] args) {public static void main(String[] args) {
new OlaWindows(" Ola Windows");new OlaWindows(" Ola Windows");}}
}}
public class OlaWindows extends javax.swing.JFrame{public class OlaWindows extends javax.swing.JFrame{ public OlaWindows(String nome) {public OlaWindows(String nome) {
super(nome);super(nome);this.setSize(400,350);this.setSize(400,350);this.setVisible(true);this.setVisible(true);
}}public static void main(String[] args) {public static void main(String[] args) {
new OlaWindows(" Ola Windows");new OlaWindows(" Ola Windows");}}
}}
13
Ola Applet
Programa OlaAppletPrograma OlaApplet
public class OlaApplet extends JApplet{public class OlaApplet extends JApplet{ public void paint(Graphics g){public void paint(Graphics g){ g.drawString("Ola Applet",10,100);g.drawString("Ola Applet",10,100); }}}}
public class OlaApplet extends JApplet{public class OlaApplet extends JApplet{ public void paint(Graphics g){public void paint(Graphics g){ g.drawString("Ola Applet",10,100);g.drawString("Ola Applet",10,100); }}}}
Página HTMLPágina HTML
<html><html> <body> <body>
<APPLET code="<APPLET code="OlaApplet.classOlaApplet.class" width=350 height=200> " width=350 height=200> </APPLET></APPLET></body></body></html></html>
<html><html> <body> <body>
<APPLET code="<APPLET code="OlaApplet.classOlaApplet.class" width=350 height=200> " width=350 height=200> </APPLET></APPLET></body></body></html></html>
14
Applets: ciclo de vida
Não têm função main
15
Ola Applet
Programa OlaAppletPrograma OlaApplet
public class OlaApplet extends JApplet{public class OlaApplet extends JApplet{ StringBuffer msg ;StringBuffer msg ; public void init(){public void init(){ msg = new StringBuffer();msg = new StringBuffer(); msg.append("Iniciando o Applet . . .");msg.append("Iniciando o Applet . . ."); }} public void start(){public void start(){ msg.append("Começando o Applet . . .");msg.append("Começando o Applet . . ."); }} public void stop(){public void stop(){ msg.append("Parando o Applet . . .");msg.append("Parando o Applet . . ."); }} public void destroy(){public void destroy(){ msg.append("Destruindo o Applet . . .");msg.append("Destruindo o Applet . . ."); }} public void paint(Graphics g){public void paint(Graphics g){ g.drawString(msg.toString(),10,100);g.drawString(msg.toString(),10,100); }} }}
public class OlaApplet extends JApplet{public class OlaApplet extends JApplet{ StringBuffer msg ;StringBuffer msg ; public void init(){public void init(){ msg = new StringBuffer();msg = new StringBuffer(); msg.append("Iniciando o Applet . . .");msg.append("Iniciando o Applet . . ."); }} public void start(){public void start(){ msg.append("Começando o Applet . . .");msg.append("Começando o Applet . . ."); }} public void stop(){public void stop(){ msg.append("Parando o Applet . . .");msg.append("Parando o Applet . . ."); }} public void destroy(){public void destroy(){ msg.append("Destruindo o Applet . . .");msg.append("Destruindo o Applet . . ."); }} public void paint(Graphics g){public void paint(Graphics g){ g.drawString(msg.toString(),10,100);g.drawString(msg.toString(),10,100); }} }}
16
Passagem de parâmetros
Programa OlaAppletPrograma OlaApplet
public class OlaApplet extends JApplet{ public class OlaApplet extends JApplet{ public void init(){public void init(){ msg = new StringBuffer();msg = new StringBuffer(); msg.append("Iniciando o Applet . . .");msg.append("Iniciando o Applet . . .");
String parametro1 = getParameter("texto");String parametro1 = getParameter("texto"); msg.append(" " + parametro1); msg.append(" " + parametro1); }}}}
public class OlaApplet extends JApplet{ public class OlaApplet extends JApplet{ public void init(){public void init(){ msg = new StringBuffer();msg = new StringBuffer(); msg.append("Iniciando o Applet . . .");msg.append("Iniciando o Applet . . .");
String parametro1 = getParameter("texto");String parametro1 = getParameter("texto"); msg.append(" " + parametro1); msg.append(" " + parametro1); }}}}
Página HTMLPágina HTML
<html><html> <body> <body> <APPLET code="OlaApplet.class" width=350 height=200> <APPLET code="OlaApplet.class" width=350 height=200>
<param name = "texto" value="isto é um parametro"><param name = "texto" value="isto é um parametro"> </APPLET></APPLET></body></body></html></html>
<html><html> <body> <body> <APPLET code="OlaApplet.class" width=350 height=200> <APPLET code="OlaApplet.class" width=350 height=200>
<param name = "texto" value="isto é um parametro"><param name = "texto" value="isto é um parametro"> </APPLET></APPLET></body></body></html></html>
17
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
18
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
19
Componentes
objectos
20
http://java.sun.com/docs/books/tutorial/uiswing/components/components.html
21
Componentes
Bottons ComboBox List Slidder TextField Label ProgressBar
22
Container pane = this.getContentPane();Container pane = this.getContentPane();
pane.add( new Button("ola"));pane.add( new Button("ola"));
Adicionar Componentes
23
Contentores Panel ScrollPane SplitPane TabbedPane ToolBar InternalFrame
24
layouts
Modos de visualização
25
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
26
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();JPanel c =new JPanel();c.add(new JButton("1"));c.add(new JButton("1"));c.add(new JTextField(9));c.add(new JTextField(9));c.add(new JButton("dois"));c.add(new JButton("dois"));c.add(new JButton("três"));c.add(new JButton("três"));
JPanel c =new JPanel();JPanel c =new JPanel();c.add(new JButton("1"));c.add(new JButton("1"));c.add(new JTextField(9));c.add(new JTextField(9));c.add(new JButton("dois"));c.add(new JButton("dois"));c.add(new JButton("três"));c.add(new JButton("três"));
27
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();JPanel c =new JPanel();c .setLayout(new GridLayout(2,2));c .setLayout(new GridLayout(2,2));c.add(new JButton(”um"));c.add(new JButton(”um"));c.add(new JTextField(5));c.add(new JTextField(5));c.add(new JButton("dois"));c.add(new JButton("dois"));c.add(new JButton("três"));c.add(new JButton("três"));
JPanel c =new JPanel();JPanel c =new JPanel();c .setLayout(new GridLayout(2,2));c .setLayout(new GridLayout(2,2));c.add(new JButton(”um"));c.add(new JButton(”um"));c.add(new JTextField(5));c.add(new JTextField(5));c.add(new JButton("dois"));c.add(new JButton("dois"));c.add(new JButton("três"));c.add(new JButton("três"));
28
BorderLayout
Divide um contentor em cinco regiões:
BorderLayout.CENTER BorderLayout.NORTH BorderLayout.EAST BorderLayout.SOUTH BorderLayout.WEST
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
JPanel c =new JPanel(new JPanel c =new JPanel(new BorderLayout());BorderLayout());JButton b1=new JButton("1");JButton b1=new JButton("1");c.add(b1,BorderLayout.NORTH);c.add(b1,BorderLayout.NORTH);JButton b2=new JButton("2");JButton b2=new JButton("2");c.add(b2,BorderLayout.EAST);c.add(b2,BorderLayout.EAST);JButton b3=new JButton("3");JButton b3=new JButton("3");c.add(b3,BorderLayout.SOUTH);c.add(b3,BorderLayout.SOUTH);JButton b4=new JButton("4");JButton b4=new JButton("4");c.add(b4,BorderLayout.WEST);c.add(b4,BorderLayout.WEST);JButton b5=new JButton("5");JButton b5=new JButton("5");c.add(b5,BorderLayout.CENTER);c.add(b5,BorderLayout.CENTER);
JPanel c =new JPanel(new JPanel c =new JPanel(new BorderLayout());BorderLayout());JButton b1=new JButton("1");JButton b1=new JButton("1");c.add(b1,BorderLayout.NORTH);c.add(b1,BorderLayout.NORTH);JButton b2=new JButton("2");JButton b2=new JButton("2");c.add(b2,BorderLayout.EAST);c.add(b2,BorderLayout.EAST);JButton b3=new JButton("3");JButton b3=new JButton("3");c.add(b3,BorderLayout.SOUTH);c.add(b3,BorderLayout.SOUTH);JButton b4=new JButton("4");JButton b4=new JButton("4");c.add(b4,BorderLayout.WEST);c.add(b4,BorderLayout.WEST);JButton b5=new JButton("5");JButton b5=new JButton("5");c.add(b5,BorderLayout.CENTER);c.add(b5,BorderLayout.CENTER);
29
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();JPanel c =new JPanel();c .setLayout(new c .setLayout(new BoxLayout(c,BoxLayout.Y_AXIS));BoxLayout(c,BoxLayout.Y_AXIS));c.add(new JButton(”um"));c.add(new JButton(”um"));c.add(new JButton(“dois”));c.add(new JButton(“dois”));c.add(new JButton(”três"));c.add(new JButton(”três"));c.add(new JButton(”quatro"));c.add(new JButton(”quatro"));
JPanel c =new JPanel();JPanel c =new JPanel();c .setLayout(new c .setLayout(new BoxLayout(c,BoxLayout.Y_AXIS));BoxLayout(c,BoxLayout.Y_AXIS));c.add(new JButton(”um"));c.add(new JButton(”um"));c.add(new JButton(“dois”));c.add(new JButton(“dois”));c.add(new JButton(”três"));c.add(new JButton(”três"));c.add(new JButton(”quatro"));c.add(new JButton(”quatro"));
30
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)
31
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);
32
Layouts Compostos
Container caixa = janela.getContentPane();Container caixa = janela.getContentPane();JPanel painel1 =new JPanel();JPanel painel1 =new JPanel();JPanel painel2 =new JPanel();JPanel painel2 =new JPanel();caixa.setLayout(new GridLayout(2,1));caixa.setLayout(new GridLayout(2,1));painel1.setLayout(new GridLayout(2,2));painel1.setLayout(new GridLayout(2,2));painel2.setLayout(new painel2.setLayout(new FlowLayout(FlowLayout.CENTER));FlowLayout(FlowLayout.CENTER));
Container caixa = janela.getContentPane();Container caixa = janela.getContentPane();JPanel painel1 =new JPanel();JPanel painel1 =new JPanel();JPanel painel2 =new JPanel();JPanel painel2 =new JPanel();caixa.setLayout(new GridLayout(2,1));caixa.setLayout(new GridLayout(2,1));painel1.setLayout(new GridLayout(2,2));painel1.setLayout(new GridLayout(2,2));painel2.setLayout(new painel2.setLayout(new FlowLayout(FlowLayout.CENTER));FlowLayout(FlowLayout.CENTER));
33
Eventos
Janelas em acção
34
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
35
Eventos Fontes, Eventos, Ouvintes
36
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);
37
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) ...
38
Interface de Eventos
39
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
40
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);
41
Exemplopublic class NewJFrame extends javax.swing.JFrame {public class NewJFrame extends javax.swing.JFrame { public NewJFrame() {public NewJFrame() { botao = new javax.swing.JButton();botao = new javax.swing.JButton();
botao.setText("click");botao.setText("click");
botao.addActionListener(botao.addActionListener(
new java.awt.event.ActionListener() {new java.awt.event.ActionListener() {
public void public void actionPerformed(java.awt.event.ActionEvent evt) {actionPerformed(java.awt.event.ActionEvent evt) {
botaoActionPerformed(evt); }botaoActionPerformed(evt); }
});});
private void botaoActionPerformed(ActionEvent evt) {private void botaoActionPerformed(ActionEvent evt) {
JOptionPane.showMessageDialog(this,"Respondi " + JOptionPane.showMessageDialog(this,"Respondi " + evt.getSource());evt.getSource());
}}}}
public class NewJFrame extends javax.swing.JFrame {public class NewJFrame extends javax.swing.JFrame { public NewJFrame() {public NewJFrame() { botao = new javax.swing.JButton();botao = new javax.swing.JButton();
botao.setText("click");botao.setText("click");
botao.addActionListener(botao.addActionListener(
new java.awt.event.ActionListener() {new java.awt.event.ActionListener() {
public void public void actionPerformed(java.awt.event.ActionEvent evt) {actionPerformed(java.awt.event.ActionEvent evt) {
botaoActionPerformed(evt); }botaoActionPerformed(evt); }
});});
private void botaoActionPerformed(ActionEvent evt) {private void botaoActionPerformed(ActionEvent evt) {
JOptionPane.showMessageDialog(this,"Respondi " + JOptionPane.showMessageDialog(this,"Respondi " + evt.getSource());evt.getSource());
}}}}
42
Fim