Programação Visual em Java -...
-
Upload
nguyencong -
Category
Documents
-
view
250 -
download
0
Transcript of Programação Visual em Java -...
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
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>>
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
22
Container pane = Container pane = this.getContentPanethis.getContentPane();();
pane.addpane.add( new ( new Button("olaButton("ola"));"));
Adicionar Componentes
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));));
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
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)...
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());));
}}}}