42
1 Programação Visual em Java

Programação Visual em Java

  • Upload
    ryu

  • View
    53

  • 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

Page 1: Programação Visual em  Java

1

Programação Visual em Java

Page 2: Programação Visual em  Java

2

Sumário

Introdução Contentores Componentes Layouts Eventos Exemplos

Page 3: Programação Visual em  Java

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

Page 4: Programação Visual em  Java

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

Page 5: Programação Visual em  Java

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

Page 6: Programação Visual em  Java

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

Page 7: Programação Visual em  Java

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

Page 8: Programação Visual em  Java

8

contentores

Aplicações

Page 9: Programação Visual em  Java

9

Hierarquia de classes:

Page 10: Programação Visual em  Java

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

Page 11: Programação Visual em  Java

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

Page 12: Programação Visual em  Java

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");}}

}}

Page 13: Programação Visual em  Java

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>

Page 14: Programação Visual em  Java

14

Applets: ciclo de vida

Não têm função main

Page 15: Programação Visual em  Java

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); }} }}

Page 16: Programação Visual em  Java

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>

Page 17: Programação Visual em  Java

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

Page 18: Programação Visual em  Java

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

Page 19: Programação Visual em  Java

19

Componentes

objectos

Page 20: Programação Visual em  Java

20

http://java.sun.com/docs/books/tutorial/uiswing/components/components.html

Page 21: Programação Visual em  Java

21

Componentes

Bottons ComboBox List Slidder TextField Label ProgressBar

Page 22: Programação Visual em  Java

22

Container pane = this.getContentPane();Container pane = this.getContentPane();

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

Adicionar Componentes

Page 23: Programação Visual em  Java

23

Contentores Panel ScrollPane SplitPane TabbedPane ToolBar InternalFrame

Page 24: Programação Visual em  Java

24

layouts

Modos de visualização

Page 25: Programação Visual em  Java

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

Page 26: Programação Visual em  Java

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"));

Page 27: Programação Visual em  Java

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"));

Page 28: Programação Visual em  Java

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);

Page 29: Programação Visual em  Java

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"));

Page 30: Programação Visual em  Java

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)

Page 31: Programação Visual em  Java

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);

Page 32: Programação Visual em  Java

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));

Page 33: Programação Visual em  Java

33

Eventos

Janelas em acção

Page 34: Programação Visual em  Java

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

Page 35: Programação Visual em  Java

35

Eventos Fontes, Eventos, Ouvintes

Page 36: Programação Visual em  Java

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);

Page 37: Programação Visual em  Java

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) ...

Page 38: Programação Visual em  Java

38

Interface de Eventos

Page 39: Programação Visual em  Java

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

Page 40: Programação Visual em  Java

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);

Page 41: Programação Visual em  Java

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());

}}}}

Page 42: Programação Visual em  Java

42

Fim