Você está na página 1de 57

GUI – GRAPHIC USER

INTERFACE
Dilvan Moreira
(baseado no livro Prog. Orientada a Objetos em Java)
Leitura
 Capítulo 11 (Prog. Orient. a Obj. usando Java - 4th
Edition)
Lembrando: Tipo estático e
slide 3
dinâmico
 O tipo declarado de uma variável é seu tipo estático.
 O tipo do objeto ao qual uma variável se refere é seu
tipo dinâmico.
 O trabalho do compilador é verificar as violações de
tipo estático.
for(Item item : items) {
item.print(); // Erro em tempo de
compilação.
}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Sobrescrição
slide 4

método print
tanto em super
como em subclasses

satizfaz tanto
a verificação de
tipo estático
como dinâmico

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Pesquisa de método
slide 5

Herança mas não


sobrescrição. A hierarquia
de herança é ascendente,
pesquisando uma
correspondência.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Polimorfismo de
slide 6
método
 Chamadas de método são polimórficas:
 O método real depende do tipo de objeto dinâmico.
 Métodos em Object são herdados por todas as
classes.
 O método toString é comumente sobrescrito:
– public String toString()
 Retorna uma representação de string do objeto.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Níveis de acesso:
slide 7

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Classes e métodos
slide 8
abstratos
 Os métodos abstratos têm abstract na assinatura.
 Os métodos abstratos não têm corpo.
 Os métodos abstratos tornam a classe abstrata.
 As subclasses concretas completam a implementação.
 As classes abstratas funcionam como superclasses
incompletas.
 Nenhuma instância.

 As classes abstratas suportam o polimorfismo.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Herança múltipla
slide 9

 Fazer uma classe herdar diretamente de


múltiplos ancestrais.
 Cada linguagem tem regras próprias.
 Como resolver definições concorrentes?
 O Java proíbe isso para classes.
 O Java permite isso para interfaces.
 Nenhuma implementação concorrente.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Características de
slide 10
interfaces
 Todos os métodos são abstratos.
 Não há construtores.
 Todos os métodos são públicos.
 Todos os campos são públicos, estáticos e
finais.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Interfaces
slide 11

 As interfaces fornecem especificação sem


implementação.
 As interfaces são inteiramente abstratas.
 As interfaces suportam o polimorfismo.
 As interfaces Java suportam múltipla
herança.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Lembrando: Implementações
slide 12
alternativas
List l1 = new ArrayList(); //use sempre dessa maneira

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Visão geral
slide 13

 Criando GUIs
 Componentes de interface
 Layout de GUI
 Tratamento de evento

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Princípios da GUI
slide 14

 Componentes: blocos de construção GUI.


 Botões, menus, sliders etc.
 Layout: organizando componentes para
formar uma GUI utilizável.

Utilizando gerenciadores de layout.
 Eventos: reagir à entrada de usuário.
 Pressionamentos de botão, seleções de menu
etc.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
AWT e Swing
slide 15

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Criando um frame
slide 16

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class ImageViewer


{
private JFrame frame;

/**
* Cria um ImageViewer para mostrá-lo na
tela.
*/
public ImageViewer()
{
makeFrame();
}

// restante da classe omitido. Programãção orientada com objetos JAVA –


} © 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Elementos de um frame
slide 17

Título: Controles de janela


Barra de menu

Painel de
conteúdo

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
O painel de conteúdo
slide 18

/**
* Cria um frame Swing e seu conteúdo.
*/
private void makeFrame()
{
frame = new JFrame("ImageViewer");
Container contentPane = frame.getContentPane();

JLabel label = new JLabel("I am a label.");


contentPane.add(label);

frame.pack();
frame.setVisible(true);
Programãção orientada com objetos JAVA –
© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
} Barnes|Kölling
Adicionando menus
slide 19

 JMenuBar
 Exibido abaixo do título.
 Contém os menus.
 JMenu

Por ex., File. Contém os itens de menu.
 JMenuItem

Por ex., Open. Itens individuais.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Menu Bar
private void makeMenuBar(JFrame frame) {
JMenuBar menubar = new JMenuBar();
frame.setJMenuBar(menubar);

// cria o menu File


JMenu fileMenu = new JMenu("File");
menubar.add(fileMenu);

JMenuItem openItem = new JMenuItem("Open");


fileMenu.add(openItem);

JMenuItem quitItem = new JMenuItem("Quit");


fileMenu.add(quitItem);
}
Tratamento de evento
slide 21

 Eventos correspondem às interações de


usuário com componentes.
 Componentes estão associados com diferentes
tipos de eventos.
 Frames estão associados com WindowEvent.
 Frames estão associados com ActionEvent.
 Os objetos podem ser notificados quando
ocorrer um evento.
 Esses objetos são chamados de ouvintes.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Recebimento centralizado de evento
slide 22

 Um único objeto trata de todos os eventos.


 Implementa a interface ActionListener.

 Define um método actionPerformed.

 Registra-se como um ouviente com cada


componente.
 item.addActionListener(this)

 Precisa funcionar com o componente que


encaminhou o evento.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Eventos Centralizados
public class ImageViewer implements ActionListener {

public void actionPerformed(ActionEvent e) {
String command = e.getActionCommand();
if(command.equals("Open")) {

}
else if (command.equals("Quit")) {

}

}

private void makeMenuBar(Jframe frame) {

openItem.addActionListener(this);

}
}
Recebimento centralizado de
slide 24
evento
 A abordagem funciona.
 É usada, então você deve estar ciente
disso.
 Mas …
 não é bem escalonável.
 a identificação de componentes de seu
texto é frágil.
 É preferível uma abordagem alternativa.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Sintaxe de classe aninhada
slide 25

 Definições de classe podem ser


aninhadas.
 public class Enclosing
{

private class Inner
{

}
}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Classes internas
slide 26

 As instâncias da classe interna estão


localizadas dentro da classe que as contém.
 As instâncias da classe interna têm acesso aos
membros privados da classe que os contém.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Classes internas anônimas
slide 27

 Cumprem regras das classes internas.


 Usadas para criar objetos únicos para o qual um
nome de classe não é necessário.
 Utilizam uma sintaxe especial.
 O exemplo é sempre referenciado via seu
supertipo, uma vez que não tem nenhum nome de
subtipo.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Ouvinte de ação anônimo
slide 28

JMenuItem openItem = new JMenuItem("Open");

openItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
openFile();
}
});

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Elementos de classes anônimas
slide 29

Criação de objetos anônimos


openItem.addActionListener(
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
openFile();
}
}
);
Definição de classe
Parâmetro real

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Saia quando a janela fechar
slide 30

frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

O WindowAdapter fornece uma


implementação no-op da interface
WindowListener.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
O projeto imageviewer
slide 31

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Processamento de imagens
slide 32

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Responsabilidades da classe
slide 33

 ImageViewer
 Configura a estrutura GUI.
 ImageFileManager
 Métodos estáticos para carregar e salvar
arquivo de imagens.
 ImagePanel
 Exibe a imagem na GUI.
 OFImage
 Modela a imagem 2D.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
OFImage
slide 34

 Nossa subclasse de BufferedImage.


 Representa um array 2D de pixels.
 Métodos importantes:

getPixel, setPixel

getWidth, getHeight
 Cada pixel tem uma cor.

Usamos java.awt.Color.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Adicionando um ImagePanel
slide 35

public class ImageViewer


{
private JFrame frame;
private ImagePanel imagePanel;

private void makeFrame()


{
Container contentPane = frame.getContentPane();
imagePanel = new ImagePanel();
contentPane.add(imagePanel);
}


}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Carregando uma imagem
slide 36

public class ImageViewer


{
private JFrame frame;
private ImagePanel imagePanel;

private void openFile()


{
File selectedFile = …;
OFImage image =
ImageFileManager.loadImage(selectedFile);
imagePanel.setImage(image);
frame.pack();
}


}
Programãção orientada com objetos JAVA –
© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Gerenciadores de layout
slide 37

 Gerenciam espaço limitado para


componentes concorrentes.
 FlowLayout, BorderLayout, GridLayout,
BoxLayout, GridBagLayout.
 Gerenciam objetos Container, por
exemplo, um painel de conteúdo.
 Cada um impõe seu próprio estilo.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
FlowLayout
slide 38

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
BorderLayout
slide 39

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
GridLayout
slide 40

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
BoxLayout
slide 41

Nota: sem
redimensionamento
de componente.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Contêineres aninhados
slide 42

 Layouts sofisticados podem ser obtidos


através do aninhamento de contêineres.

Utilize JPanel como um contêiner básico.
 Cada contêiner tem seu próprio
gerenciador de layout.
 Em geral, preferível a usar um
GridBagLayout.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Estruturas e cola
slide 43

 Componentes invisíveis utilizados como espaços.


 Disponíveis a partir da classe Box.
 Estrutura: tamanho fixo.
 Component createHorizontalStrut(int width)

Component createVerticalStrut(int height)
 Cola: preenche o espaço disponível.

Component createHorizontalGlue()
 Component createVerticalGlue()

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Caixas de diálogo
slide 44

 Caixas de diálogos modais bloqueiam


toda a outra interação.
 Forçam uma resposta do usuário.
 Caixas de diálogo não-modais permitem
outra interação.
 Às vezes isso é desejável.
 Pode ser difícil evitar inconsistências.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Caixa de diálogo padrão
slide 45
JOptionPane
 Caixa de diálogo de mensagem:
 Texto da mensagem mais um botão OK.
 Caixa de diálogo confirmar:
 Opções Yes, No, Cancel.
 Caixa de diálogo de entrada:
 Texto da mensagem e uma entrada de campo.
 Variações são possíveis.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Uma caixa de diálogo de mensagens
slide 46

private void showAbout()


{
JOptionPane.showMessageDialog(frame,
"ImageViewer\n" + VERSION,
"About ImageViewer",
JOptionPane.INFORMATION_MESSAGE);
}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Filtros de imagem
slide 47

 Funções aplicadas à imagem inteira.

int height = getHeight();


int width = getWidth();
for(int y = 0; y < height; y++) {
for(int x = 0; x < width; x++) {
Color pixel = getPixel(x, y);
alter the pixel's color value;
setPixel(x, y, pixel);
}
}

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Adicionando mais filtros
slide 48

private void makeLighter()


{
if(currentImage != null) {
currentImage.lighter();
frame.repaint();
showStatus("Applied: lighter");
}
else {
showStatus("No image loaded."); Duplicação
}
} de código?
private void threshold() Refatore!
{
if(currentImage != null) {
currentImage.threshold();
frame.repaint();
showStatus("Applied: threshold");
}
else {
showStatus("No image loaded.");
}
} Programãção orientada com objetos JAVA –
© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Adicionando mais filtros
slide 49

 Defina uma superclasse Filter (abstrata).


 Crie subclasses específicas à função.
 Crie uma coleção de instâncias de subclasse em
ImageViewer.
 Defina um método applyFilter genérico.
 Veja imageviewer2-0.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
imageviewer2-0
slide 50

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Botões e layouts aninhados
slide 51

Um GridLayout dentro de
um FlowLayout dentro de
um BorderLayout.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Margens
slide 52

 Utilizadas para adicionar decoração em


torno dos componentes.
 Definidas em javax.swing.border
 BevelBorder, CompoundBorder, EmptyBorder,
EtchedBorder, TitledBorder.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Adicionando espaçamento
slide 53

JPanel contentPane = (JPanel)frame.getContentPane();


contentPane.setBorder(new EmptyBorder(6, 6, 6, 6));

// Define o gerenciador de layout com bom espaçamento


contentPane.setLayout(new BorderLayout(6, 6));

imagePanel = new ImagePanel();


imagePanel.setBorder(new EtchedBorder());
contentPane.add(imagePanel, BorderLayout.CENTER);

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Outros componentes
slide 54

 Controle deslizante
 Spinner
 Painel com guias
 Painel de rolagem

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Revisão
slide 55

 Tenha como objetivo estruturas de aplicação


coesas.
 Esforce-se para manter elementos da GUI separados da
funcionalidade da aplicação.
 Componentes predefinidos para simplificar a
criação de GUIs sofisticadas.
 Os gerenciadores de layout tratam da justaposição
de componentes.
 Contêineres aninhados para maior controle.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Revisão
slide 56

 Muitos componentes reconhecem interações


de usuário com eles.
 Componentes reativos entregam eventos para
ouvintes.
 Classes internas anônimas são comumente usadas
para implementar ouvintes.

Programãção orientada com objetos JAVA –


© 2008 by Pearson Education Uma introdução prática utilizando o BlueJ
Barnes|Kölling
Perguntas?

Você também pode gostar