LPG II – Java Interface Gráfica AWT Interface Gráfica Introdução

Propaganda
Interface Gráfica
„
„
„
LPG II – Java
Interface Gráfica AWT
„
„
„
„
Introdução
AWT
Construção de uma Aplicação Gráfica
A Classe Componente e sua Hierarquia
Gerenciadores de Layout
Modelo de Eventos
Componentes Básicos
Roberto Vedoato
[email protected]
Inerface Gráfica
Introdução
„
„
„
2
AWT - Abstract Window Toolkit
Cada sistema operacional oferece Interfaces Gráficas
(GUI - Graphical User Interface) com aparências
(look-and-feel) distintas
Java oferece capacidades para o desenvolvimento de
aplicações gráficas que, sem modificação ou
recompilação, podem ser executadas em diferentes
GUIs
Os elementos básicos das GUIs são os componentes
gráficos, também conhecidos como window gadgets
(dispositivos de janela), que são objetos visuais com o
qual o usuário pode interagir. Por exemplo, botões,
caixas de entrada de texto, caixas de seleção, barras
de rolagem, etc.
Inerface Gráfica
„
„
„
„
„
3
Através do pacote java.awt (Abstract Window Toolkit), Java
oferece, na forma de classes, uma biblioteca de componentes e
facilidades gráficas
AWT se baseia num denominador comum entre as plataformas
suportadas pela JVM, implementando componentes e facilidades
que podem ser reproduzidas de forma equivalente entre as
diversas plataformas que possuem JVM
Cada componente na API independente de arquitetura tem um
componente dependente de arquitetura para a implementação
específica (Peers)
É limitado em recursos devido a depender de suporte de cada
plataforma para os componentes oferecidos
A aparência de um componente depende da plataforma, mas os
princípios de funcionamento e operação dos componentes são
os mesmos
Inerface Gráfica
4
Hierarquia AWT
Construindo uma Aplicação Gráfica
„
„
JDK não oferece uma interface para construção visual
de GUIs
A implementação de uma GUI envolve três simples
etapas
„
„
„
„
„
„
A classe abstrata java.awt.Component é a base para
construção de todos os componentes AWT
A classe java.awt.Graphics provê um conjunto de
primitivas de desenho
A classe java.awt.Toolkit permite obter informações sobre
o sistema gráfico em uso pela JVM
Inerface Gráfica
5
Construindo uma Aplicação Gráfica
„
„
„
Inerface Gráfica
6
Construindo uma Aplicação Gráfica
Declarar e instanciar os componentes de interface
„
Declarar e instanciar os componentes de interface
Adicionar o componente a interface
Registrar os métodos processadores de eventos
„
Como um componente é uma classe, basta instanciar um objeto da
classe desejada para criarmos um componente
Geralmente os componentes são associados a variáveis membro da
classe para que possam ser referenciados por todos métodos da
mesma
Exemplo
Adicionar o componente a interface
„
// declaração dos atributos da classe
private Button b1;
private Button b2;
...
// intanciação no construtor da classe
b1 = new Button(“Ok”);
b2 = new Button(“Fechar”);
„
Para serem exibidos, cada um dos componentes deve
ser adicionado em um container da interface
(recipiente) - componente capaz de conter outros
componentes - e ter seu posicionamento especificado
através de um dos gerenciadores de layout
Exemplo
add(b1);
add(b2, BorderLayout.SOUTH);
Inerface Gráfica
7
// layout padrão
// Border layout
Inerface Gráfica
8
Construindo uma Aplicação Gráfica
„
A Classe Componente e sua Hierarquia
Registrar os métodos processadores de eventos
„
„
„
„
Button
A interface das aplicações é estabelecida pela GUI do SO
Quando ocorre a interação do usuário com a aplicação, o SO envia
para a aplicação responsável pela janela uma série detalhada de
mensagens narrando o tipo e forma da interação
Para aplicação processar tal interação, métodos especiais (event
listeners) capazes de receber tais mensagens devem ser
adicionados e associados aos componentes que desejamos ser
capazes de reagir a interação do usuário
Exemplo
Canvas
Object
Component
Checkbox
Choice
Container
Label
List
b1.addActionListener(this);
b2.addActionListener(new ButtonHandler());
Scrollbar
TextComponent
Inerface Gráfica
„
add(PopupMenu) - Adiciona um menu popup ao componente
addKeyListener(KeyListener) - Adiciona proc. de eventos de teclas
addMouseListener(MouseListener) - Adiciona proc.de eventos do mouse
getBackground() - Obtêm cor do segundo plano do componente
getBounds() - Obtêm limites do componente como um objeto Rectangle
getComponentAt(int, int) - Retorna o componente contido na posição
getCursor() - Obtêm o cursor atual do componente
getFont() - Obtêm o fonte atual do componente
getGraphics() - Obtêm o contexto gráfico do componente
getLocation() - Obtêm a posição (esquerda, topo) do componente
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
„
Inerface Gráfica
Window
Dialog
FileDialog
Frame
TextArea
TextField
10
Métodos da classe java.awt.Component
„
„
ScrollPane
Inerface Gráfica
A classe java.awt.Component fornece o comportamento padrão para
a grande maioria dos elementos de interface
„
Applet
Classes derivadas da classe abstrata java.awt.Component
9
Métodos da classe java.awt.Component
Panel
11
getSize() - Obtêm tamanho do componente como um objeto Dimension
isEnabled() - Determina se o componente está habilitado
isVisible() - Determina se o componente está visível
paint(Graphics) - Renderiza o componente
repaint() - Atualiza a renderização do componente
setBounds(int, int, int, int) - Move e redimensiona o componente
setCursor(Cursor) - Especifica o cursor para o componente
setEnabled(Boolean) - Habilita ou desabilita o componente
setFont(Font) - Especifica o fonte do componente
setLocation(int, int) - Move o componente para a posição dada
setSize(int, int) - Especifica o tamanho do componente
setVisible(Boolean) - Especifica se o componente é visível
update(Graphics) - Atualiza a exibição do componente
Inerface Gráfica
12
Gerenciadores de Layout
„
„
Java oferece um esquema simplificado mas muito versátil para o
posicionamento de componentes nos containers
Há duas formas de acrescentar componentes em um container
„
„
„
„
FlowLayout
„
Usar um Gerenciador de Layout (layout manager) para dimensionar e
posicionar os componentes (esta é a maneira recomendada e default)
Desligar o layout manager e posicionar e redimensionar os componentes
diretamente (pixels)
„
setLayout(new FlowLayout());
Todo container tem um algoritmo de layout default
Método setLayout() define o Gerenciador de Layout a ser utilizado
„
„
„
„
„
„
FlowLayout
BorderLayout
GridLayout
GridBagLayout
CardLayout
Null – para desligar os layout managers
Inerface Gráfica
13
GridLayout
„
„
„
Os componentes são arranjados por linhas, da
esquerda para direita na ordem em que são
adicionados
Exemplo
Inerface Gráfica
14
BorderLayout
Os componentes são arranjados numa grade
retangular onde todas as células possuem o mesmo
tamanho de forma que toda a área do container seja
ocupada
O número de linhas e colunas pode ser especificado,
Exemplo
„
„
„
Os componentes são arranjados pelos pontos cardeais
mais o centro
Cada região só pode ser ocupada por um único
componente
Os componentes são redimensionados de forma a
ocuparem toda a região onde foram inseridos
setLayout(new GridLayout(2, 2));
Inerface Gráfica
15
Inerface Gráfica
16
Modelo de eventos
„
A partir da versão Java 1.1. é utilizado o modelo de
eventos por delegação. Neste modelo há três tipos de
objetos envolvidos
„
„
„
„
Modelo de eventos
„
Objetos que atuam como fontes (sources) de eventos
Objetos que atuam como ouvintes (listeners) de
eventos
Objeto evento enviado da fonte para o listener
designado
„
„
Um evento pode ser qualquer ação externa de
interação com a aplicação, sendo cada tipo de evento
um objeto de uma classe distinta, que fornece
informações a respeito do evento e identifica sua
fonte
Inerface Gráfica
„
17
Hierarquia de Eventos da AWT
„
Cada componente pode disparar determinados tipos
de eventos que podem ser “ouvidos” por um ou mais
listeners
Cada evento tem uma interface correspondente que
possui métodos padrão para tratá-los
Listeners são objetos de qualquer classe, que
implementam a interface, para recepção e
processamento, de um tipo particular de evento
Para ser notificado, o listener deve registrar-se como
um ouvinte de evento (event listener) junto à fonte do
evento (event source)
Inerface Gráfica
18
Inerface Gráfica
20
Componentes e Eventos
Eventos são objetos de subclasses de java.awt.AWTEvent, tendo como principais métodos
„
„
getSource() - devolve o objeto que causou o evento
getID() - devolve o tipo do evento
Inerface Gráfica
19
Utilizando listeners
„
O componente que deseja que um evento seja tratado,
„
„
„
„
Possui métodos para registro dos objetos ouvintes
(listeners) add<tipo de evento>Listener()
Também para remoção remove<tipo de evento>Listener()
Classes Adaptadoras (Adapter Classes)
„
„
O pressionamento de um botão dispara um evento Action
botao.addActionListener(<objeto ActionListener>)
„
Para processar um evento produzido por um componente
(objeto fonte) deve-se implementar todos os métodos da
interface de tal evento na classe receptora (listener)
Inerface Gráfica
Evento
ActionEvent
KeyEvent
MouseEvent
Interface/Adaptador
ActionListener
KeyListener
KeyAdapter
MouseListener
MouseAdapter
MouseMotionListener
MouseMotionAdapter
Em muitas situações é desejavel processar apenas
eventos específicos através dos métodos apropriados
Para evitar a implementação de métodos vazios
(dummy methods), faz-se uso das classes adaptadoras
(adapter classes) que implementam estes
Na extensão destas classes é necessário implementar
apenas os métodos de interesse em sobreposição aos
métodos vazios pré-definidos na classe base
adaptadora
21
Eventos, Interfaces e Métodos
„
„
Exemplo
„
„
Utilizando listeners
Inerface Gráfica
22
Frame
Métodos
actionPerformed
keyPressed
keyReleased
keyTyped
mousePressed
mouseReleased
mouseEntered
mouseExited
mouseClicked
mouseDragged
mouseMoved
„
„
„
„
„
Janela do sistema gráfico capaz de conter outros
componentes
Possui uma barra de título e bordas
Implementa a interface java.awt.MenuContainer de
forma que também possa conter outros componentes,
como uma barra de menus e seus menus associados
O alinhamento padrão é o java.awt.BorderLayout
A classe oferece constantes para especificação de
cursores
Obs.: Eventos também possuem seus métodos que podem ser
chamados dentro dos listeners para obter as informações
desejadas (textos, coordenadas, teclas apertadas, etc.)
Inerface Gráfica
23
Inerface Gráfica
24
Frame - Exemplo
Frame
import java.awt.*;
public class FrameExemplo extends Frame {
// construtor
public FrameExemplo() {
setTitle(“FrameExemplo");
setSize(200, 200);
setLocation(100, 100);
}
// main
public static void main(String[] args) {
// Create application frame
FrameExemplo frm1 = new FrameExemplo();
„
„
Observe que o frame não é fechada quando clicamos no botão
"X“, pois não há nenhum processador de eventos associado
Para o frame ter seus eventos processador utiliza-se
„
a interface java.awt.event.WindowListener; ou
„
que exige a implementação de sete métodos:
„
„
„
„
„
„
}
}
// Show frame
frm1.setVisible(true);
„
„
que possui um único método, windowClosing, responsável por
processar o evento de fechar janela
25
Frame – Exemplo com listener
„
windowClosing(WindowEvent e)
windowClosed(WindowEvent e)
windowIconified(WindowEvent e)
windowOpened(WindowEvent e)
windowDeiconified(WindowEvent e)
windowActivated(WindowEvent e)
windowDeactivated(WindowEvent e)
a classe abstrata java.awt.event.WindowAdapter
„
Inerface Gráfica
void
void
void
void
void
void
void
Inerface Gráfica
26
Frame –listener com classe aninhada
Cria-se uma nova classe para implementar a classe
abstrata java.awt.event.WindowAdapter
„
import java.awt.*;
import java.awt.event.*;
class CloseWindowAndExit extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
}
Inerface Gráfica
E faz-se uso desta nova classe na aplicação
import java.awt.*;
public class FrameExemplo extends Frame {
// construtor
public FrameExemplo() {
setTitle(“FrameExemplo");
setSize(200, 200);
setLocation(100, 100);
}
// main
public static void main(String[] args) {
FrameExemplo frm1 = new FrameExemplo();
frm1. addWindowListener(new CloseWindowAndExit());
frm1.setVisible(true);
}
}
27
Inerface Gráfica
28
Frame – listener com classe anônima
Frame
import java.awt.*;
import java.awt.event.*;
public class FrameExemplo extends Frame {
public FrameExemplo() {
setTitle(“FrameExemplo");
setSize(200, 200);
setLocation(100, 100);
}
public static void main(String[] args) {
FrameExemplo frm1 = new FrameExemplo();
frm1. addWindowListener(
new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0); } } );
frm1.setVisible(true); }
}
„
Inerface Gráfica
29
Label (Rótulos)
„
„
„
Usualmente implementa-se uma classe para o frame
responsável pelas operações de interface e outra
classe responsável pelas operações da classe em si.
Por exemplo, poderíamos ter uma classe Cliente e
uma outra classe ClienteFrame fazendo uso da
primeira
Inerface Gráfica
30
Button (Botões)
Exibe texto dentro de qualquer componente container
Usualmente é um componente passivo, exibindo uma
única linha de texto a qual não pode ser modificada
nem editada pelo usuário
Exemplo
„
„
„
// instanciação
l1 = new Label(“Este é um label”);
...
// adição dos componentes
add(l1);
add(new Label(“Label adicionado sem referência”));
Inerface Gráfica
„
31
São componentes que quando acionados, podem
provocar a execução de alguma rotina ou seqüência
de comandos
O texto associado ao botão não pode ser alterado
pelo usuário, porém pode ser alterado na aplicação
Componente ativo, para que responda a interação
com o usuário é necessário registrar listeners para os
eventos gerados por essa interação.
O acionamento de um botão deve ser processado por
um objeto listener que implemente a interface
ActionListener. Isto é possível através do método
addActionListener(ActionListener)
Inerface Gráfica
32
Button (Botões)
„
Button (Botões)
Exemplo sendo criado um novo objeto que
implementa a interface ActionListener ao se passar o
parâmetro para o método addActionListener da classe
botão
„
public class ExemploBtn extends Frame implements ActionListener{
button1 = new Button();
button1.addActionListener(this);
button1 = new Button();
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
button1ActionPerformed(evt);
}
});
public void actionPerformed(ActionEvent e) {
// Rotina desejada
if (e.getSource()==button1) {...}
}
....
}
private void button1ActionPerformed(ActionEvent evt) {
// Rotina desejada
}
Inerface Gráfica
„
„
„
„
Poderíamos usar esse mesmo listener para
processar o evento ActionEvent produzido por
outro botão
Inerface Gráfica
34
Menus
Classe
MenuComponent
(abstrata)
MenuItem
MenuBar
Menu
MenuShortCut
Descrição
Define o comportamento básico dos
componentes de menus
Define um item simples de menu
Define uma barra de menus
Define um menu suspenso
Define um atalho para um item de
menu
CheckboxMenuItem Define um item de menu tipo opção
PopupMenu
Define um menu pop-up independente
Possibilita a edição e entrada de uma única linha de texto pelo
usuário
Dados inseridos através deste componente são textos, devendo
ser explicitamente convertidos para outros tipos quando
desejado
O controle do texto contido no componente é realizado através
de métodos herdados da classe TextComponent
Podem existir dois listeners associados a este componente
„
„
33
TextField (Caixa de Texto)
„
Exemplo implementando a interface ActionListener no
conteiner que contém o botão
Um ActionListener, que ouve as ações quando o foco está no
componente TextField, por exemplo quando o usuário tecla “Enter”
E um TextListener que ouve os eventos associados a edição do
texto
Inerface Gráfica
35
Inerface Gráfica
36
Exemplo de Criação de Menus
// barra de menu
MenuBar barraMenu = new MenuBar();
// menus suspensos
Menu menuArquivo = new Menu("Arquivo");
// itens do menu Arquivo
MenuItem miNovo = new MenuItem("Novo“, new
MenuShortcut(KeyEvent.VK_N));
MenuItem miAbrir = new MenuItem("Abrir...");
// listeners para os itens de menu
miNovo.addActionListener(this);
miAbrir.addActionListener(this);
// adicionando itens ao menu Arquivo
menuArquivo.add(miNovo);
Inerface Gráfica
37
Download