programação visual em java -...

42
1 Programação Visual em Java

Upload: nguyencong

Post on 08-Nov-2018

250 views

Category:

Documents


0 download

TRANSCRIPT

1

Programação Visual em Java

2

Sumário

IntroduçãoContentoresComponentesLayoutsEventosExemplos

3

Introdução

Interfaces gráficas são compostas por:Contentores

Janelas, painéisComponentes

botões, menus, caixas de textolayouts

Disposição dos componentes nos contentoresEventos

Rato, teclado, sistema operativo

4

Introdução(Graphical User Interface - InterfaceGráfica do Utilizador) :

AWT (Abstract Window Toolkit)Infra-estrutura mínima de interface gráficaÉ implementada sobre componentes nativos do sistema operativo.Limitado em recursoDiferentes plataformas possuem aparência diferenteBugs 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, etcdesenho 2D (java.awt.geom)funcionalidades drag-and-drop (java.awt.dnd)API com acessibilidade a usuários (javax.accessibility

6

HistóricoJava 1.0

Interface executa de forma medíocre em todas as plataformasModelo de eventos arcaico

Java 1.1Melhora o modelo de eventos por delegação usando o design pattern Observer

Java 1.2JFC/Swing substitui totalmente os componentes AWT

Mantém e estende a interface de eventos e layout

7

ComponentesTodos os elementos de uma aplicação são componentesPrincipais 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 setLocationgetForeground e setForegroundgetFont e setFontsetEnablesetVisible

8

contentores

Aplicações

9

Hierarquia de classes:

10

Classes ContentorasFrame (AWT) e JFrame (Swing)

Servem de base para qualquer aplicação gráficapossui uma barra de título e características para receber menus e outros componentes.

Applet e JAppletTipo de Panel (JPanel) que serve de base para aplicações que se executam dentro de browsersPode ser inserido dentro de uma página HTML e ocupar o contexto gráfico do browser

Dialog e JDialogUsada para definir janelas de diálogo para entrada de dados

11

Aplicações visuaisAplicações gráficas em Java:

Applets:componentes iniciados via browser

Aplicações stand aloneiniciados pelo sistema operativo

Capturam eventos do sistemaRato, teclado, . . .

Desenham-se sobre um contexto gráfico fornecido peloSistema operativo

Aplicação gráficaBrowser

Fornece os recursos gráficosControla 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 OlaWindows(String nome) {super(nome);this.setSize(400,350);this.setVisible(true);

}public static void main(String[] args) {

new OlaWindows(" Ola Windows");}

}

publicpublic classclass OlaWindowsOlaWindows extendsextends javax.swing.JFrame{javax.swing.JFrame{

publicpublic OlaWindows(StringOlaWindows(String nome) {nome) {super(nomesuper(nome););this.setSize(400,350);this.setSize(400,350);this.setVisible(truethis.setVisible(true););

}}publicpublic staticstatic voidvoid main(String[main(String[] ] argsargs) {) {

newnew OlaWindows(OlaWindows(" " OlaOla Windows");Windows");}}

}}

13

Ola Applet

Programa OlaAppletPrograma OlaAppletpublic class OlaApplet extends JApplet{

public void paint(Graphics g){g.drawString("Ola Applet",10,100);

}}

publicpublic classclass OlaAppletOlaApplet extendsextends JApplet{JApplet{

publicpublic voidvoid paint(Graphicspaint(Graphics g){g){g.drawString(g.drawString(""OlaOla AppletApplet",10,100);",10,100);

}}}}

Página HTMLPágina HTML<html>

<body> <APPLET code="OlaApplet.class" width=350 height=200> </APPLET>

</body></html>

<<htmlhtml>><<bodybody> >

<APPLET <APPLET code=code=""OlaApplet.classOlaApplet.class" width=350 height=200> " width=350 height=200> </APPLET></APPLET>

</</bodybody>></</htmlhtml>>

14

Applets: ciclo de vida

Não têm função main

15

Ola Applet

Programa OlaAppletPrograma OlaAppletpublic 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);}

}

publicpublic classclass OlaAppletOlaApplet extendsextends JApplet{JApplet{StringBufferStringBuffer msgmsg ;;publicpublic voidvoid init(init(){){

msgmsg = = newnew StringBuffer(StringBuffer(););msg.append(msg.append("Iniciando o "Iniciando o AppletApplet . . .");. . .");

}}publicpublic voidvoid start(start(){){

msg.append(msg.append("Come"Começçando o ando o AppletApplet . . .");. . .");}}publicpublic voidvoid stop(stop(){){

msg.append(msg.append("Parando o "Parando o AppletApplet . . .");. . .");}}publicpublic voidvoid destroy(destroy(){){

msg.append(msg.append("Destruindo o "Destruindo o AppletApplet . . .");. . .");}}publicpublic voidvoid paint(Graphicspaint(Graphics g){g){

g.drawString(msg.toString(g.drawString(msg.toString(),10,100);),10,100);}}

}}

16

Passagem de parâmetros

Programa OlaAppletPrograma OlaAppletpublic class OlaApplet extends JApplet{

public void init(){msg = new StringBuffer();msg.append("Iniciando o Applet . . .");

String parametro1 = getParameter("texto");msg.append(" " + parametro1);

}}

publicpublic classclass OlaAppletOlaApplet extendsextends JApplet{JApplet{publicpublic voidvoid init(init(){){

msgmsg = = newnew StringBuffer(StringBuffer(););msg.append(msg.append("Iniciando o "Iniciando o AppletApplet . . .");. . .");

StringString parametro1 = parametro1 = getParameter(getParameter("texto");"texto");msg.append(msg.append(" " + parametro1); " " + parametro1);

}}}}

Página HTMLPágina HTML<html>

<body> <APPLET code="OlaApplet.class" width=350 height=200> <param name = "texto" value="isto é um parametro">

</APPLET></body></html>

<<htmlhtml>><<bodybody> > <APPLET <APPLET code=code=""OlaApplet.classOlaApplet.class" width=350 height=200> " width=350 height=200>

<param <param namename = "texto" = "texto" value=value="isto "isto éé um um parametroparametro">"></APPLET></APPLET>

</</bodybody>></</htmlhtml>>

17

Restrições dos applets(sandbox)

Não pode carregar bibliotecas externasNão pode ler ou escrever arquivos na máquina clienteNão pode fazer ligações de rede a não ser para a máquina de onde veioNão pode iniciar a execução de nenhum programa na máquina do clienteNão tem acesso à maior parte das propriedades do sistemaJanelas abertas têm aviso de segurançaVárias restrições podem ser flexibilizadas se o applet for assinado

18

Vantagens / desvantagens dos applets

DesvantagensRestrições de segurançaTempo de downloadIncompatibilidade com browsers

VantagensFacilidade de realizar comunicação em redePossibilidade de abrir janelas externasCapacidade de estender o browser em recursos de segurança, protocolos de rede, capacidade gráficaAplicação sempre atualizadaCapacidade 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

BottonsComboBoxListSlidderTextFieldLabelProgressBar

22

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

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

Adicionar Componentes

23

Contentores

PanelScrollPaneSplitPaneTabbedPaneToolBarInternalFrame

24

layouts

Modos de visualização

25

Layouts

Filosofia da linguagem JAVA programas portáveisinterface adaptável.

Localização dos Componentes não é indicada por um par ordenado (x,y)

C++ builderGestor de Apresentação

LayoutManager.Adapatação automática dos componentes

Pouco flexiveis para o programadorVários layoutManagerPossibilidade 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();

c.add(new JButton("1"));c.add(new JTextField(9));c.add(new JButton("dois"));c.add(new JButton("três"));

JPanelJPanel c c =new=new JPanel(JPanel(););c.add(newc.add(new JButton(JButton("1"));"1"));c.add(newc.add(new JTextField(9));JTextField(9));c.add(newc.add(new JButton(JButton("dois"));"dois"));c.add(newc.add(new JButton(JButton("três"));"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();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"));

JPanelJPanel c c =new=new JPanel(JPanel(););c .c .setLayout(newsetLayout(new GridLayout(2,2));GridLayout(2,2));c.add(newc.add(new JButton(JButton(””um"));um"));c.add(newc.add(new JTextField(5));JTextField(5));c.add(newc.add(new JButton(JButton("dois"));"dois"));c.add(newc.add(new JButton(JButton("três"));"três"));

28

BorderLayout

Divide um contentor em cinco regiões:

BorderLayout.CENTERBorderLayout.NORTHBorderLayout.EASTBorderLayout.SOUTHBorderLayout.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(newBorderLayout());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);

JPanelJPanel c c =new=new JPanel(newJPanel(newBorderLayout(BorderLayout());));JButtonJButton b1=new b1=new JButton(JButton("1");"1");c.add(b1,BorderLayout.NORTH);c.add(b1,BorderLayout.NORTH);JButtonJButton b2=new b2=new JButton(JButton("2");"2");c.add(b2,BorderLayout.EAST);c.add(b2,BorderLayout.EAST);JButtonJButton b3=new b3=new JButton(JButton("3");"3");c.add(b3,BorderLayout.SOUTH);c.add(b3,BorderLayout.SOUTH);JButtonJButton b4=new b4=new JButton(JButton("4");"4");c.add(b4,BorderLayout.WEST);c.add(b4,BorderLayout.WEST);JButtonJButton b5=new b5=new JButton(JButton("5");"5");c.add(b5,BorderLayout.CENTER);c.add(b5,BorderLayout.CENTER);

29

BoxLayout

Respeita o tamanho preferido dos componentesColoca os componentes numa linha ou coluna.

BoxLayout.X_AXIS para componentes em linhaBoxLayout.Y_AXIS para componentes em coluna

JPanel c =new JPanel();c .setLayout(newBoxLayout(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"));

JPanelJPanel c c =new=new JPanel(JPanel(););c .c .setLayout(newsetLayout(newBoxLayout(c,BoxLayout.Y_AXISBoxLayout(c,BoxLayout.Y_AXIS));));c.add(newc.add(new JButton(JButton(””um"));um"));c.add(newc.add(new JButton(JButton(““doisdois””));));c.add(newc.add(new JButton(JButton(””três"));três"));c.add(newc.add(new JButton(JButton(””quatro"));quatro"));

30

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

ContainerContainer caixa = caixa = janela.getContentPane(janela.getContentPane(););JPanelJPanel painel1 painel1 =new=new JPanel(JPanel(););JPanelJPanel painel2 painel2 =new=new JPanel(JPanel(););caixa.setLayout(newcaixa.setLayout(new GridLayout(2,1));GridLayout(2,1));painel1.setLayout(new GridLayout(2,2));painel1.setLayout(new GridLayout(2,2));painel2.setLayout(new painel2.setLayout(new FlowLayout(FlowLayout.CENTERFlowLayout(FlowLayout.CENTER));));

33

Eventos

Janelas em acção

34

Eventos

Realizam o trabalho útil numa aplicaçãoDesencadeiam a execução de métodos

Dependem do eventoDependem do componente

São geridos por objectos de eventosjava.util.EventObject

Listeners

35

EventosFontes, Eventos, Ouvintes

36

java.util.EventObjectTodo 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 Eventosjava.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

AdaptersAlguns 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 outrosNão são úteis em ouvintes que já estendem outras classes ou quando implementam diferentes listeners

Eliminação de métodosO nome do adapter é semelhante ao do Listener

MouseListener: MouseAdapterWindowListener: WindowAdapter

40

EventosExemplo: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 listenero objeto não adivinha que ele mesmo tem que capturar seus eventos

this.addWindowListener(this);

41

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

}}

publicpublic classclass NewJFrameNewJFrame extendsextends javax.swing.JFramejavax.swing.JFrame {{

publicpublic NewJFrame(NewJFrame() {) {botaobotao = = newnew javax.swing.JButton(javax.swing.JButton(););

botao.setText(botao.setText(""clickclick");");

botao.addActionListener(botao.addActionListener(

newnew java.awt.event.ActionListener(java.awt.event.ActionListener() {) {

publicpublic voidvoidactionPerformed(java.awt.event.ActionEventactionPerformed(java.awt.event.ActionEvent evtevt) {) {

botaoActionPerformed(evtbotaoActionPerformed(evt); }); }

});});

privateprivate voidvoid botaoActionPerformed(ActionEventbotaoActionPerformed(ActionEvent evtevt) {) {

JOptionPane.showMessageDialog(thisJOptionPane.showMessageDialog(this,"Respondi " + ,"Respondi " + evt.getSource(evt.getSource());));

}}}}

42

Fim