Buscar

Cap7 - Interface Grafica

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 35 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Isaias Camilo Boratti
7. Interface Gráfica
GUI --> Graphics User Interface
Aplicação com interface gráfica --> Janelas contendo componentes visuais 
tais como: botões, rótulos, campos de texto, menus, combobox, etc.
O usuário interage com a aplicação através ações na interface, tais como: 
clicar com o mouse em botão, pressionar enter, digitar algo em um campo de 
texto, colocar o ponteiro do mouse sobre um componente, etc. 
Pacotes : javax.swing.*
java.awt.*
Isaias Camilo Boratti
// um primeiro exemplo
import javax.swing.*;
public class Janela extends JFrame
{ public Janela()
{
this.setTitle(“Minha primeira janela”);
this.setSize(300,200);
}
}
public class Principal
{
public static void main(String [] args)
{
Janela minhaJanela = new Janela();
minhaJanela.show();
}
}
Inserindo componentes na janela
import javax.swing.*;
import java.awt.*;
public class Janela extends JFrame
{ protected JButton botao;
public Janela()
{ botao = new JButton(“Fechar”);
Container c = this.getContentPane();
// c é um objeto que definirá o conteúdo da janela 
c.add(botao);
this.setTitle(“Minha primeira janela”);
this.setSize(300,200); }
}
public class Principal
{ public static void main(String [] a)
{ Janela minhaJanela = new Janela(); minhaJanela.show(); }
}
Isaias Camilo Boratti
Container
- Toda janela possui um container (objeto da classe Container). Para 
obter o container de uma janela usa-se o método getContentPane();
- A função do container é conter os componentes visuais da janela.
- Os componentes visuais que integrarão a janela devem ser adicionados
ao container da janela. Para isso usa-se o método add(componente) da
classe Container.
- A disposição dos componentes na janela dependerá da ordem em que
são adicionados ao container e do gerenciador de layout do container.
Adicionando um ouvinte de evento de ação
import java.awt.*; import java.awt.event.*; import javax.swing.*;
public class Janela extends JFrame
{ protected JButton botao;
public Janela()
{ botao = new JButton("Fechar" );
Container c = this.getContentPane(); 
c.add(botao);
OuvinteEventoAcao ouvinte = new OuvinteEventoAcao();
botao.addActionListener(ouvinte);
this.setTitle("Minha primeira janela"); this.setSize(300,200);
}
// classe interna
public class OuvinteEventoAcao implements ActionListener
{ public void actionPerformed(ActionEvent e)
{ System.exit(0); }
}
} 
public class Principal
{ public static void main(String [] a)
{ Janela j = new Janela(); j.show(); }
}
EVENTOS
Um evento consiste em algo que acontece, seja pela interação do 
usuário com a interface ou seja pela ação da própria interface.
Exemplos:
usuário clica com o mouse em um botão;
usuário pressiona a tecla enter;
usuário modifica o conteúdo de um campo de texto;
uma janela é aberta;
um componente ganha o foco de entrada;
Cada componente visual suporta um determinado conjunto de 
eventos. Por exemplo, para um botão tem-se determinados eventos, entre os 
quais, tem-se o evento clicar com o mouse, pressionar enter, etc.
Isaias Camilo Boratti
Para que um componente visual “ reaja” a determinado evento x é necessário:
1) Que o componente tenha um objeto ouvinte de evento que saiba 
ouvir o evento x.
2) Seja implementada a classe do objeto ouvinte de evento, definindo-
se o corpo do método adequado ao evento x.
Obs.: Um componente visual pode ter zero ou mais ouvintes de evento.
-Um ouvinte de evento consiste em um objeto que é associado a um (ou mais) 
componente visual e que fica ouvindo se determinados eventos acontecem.
Isaias Camilo Boratti
Em Java, os ouvintes de eventos são divididos em grupos (ouvinte de ação, 
ouvinte de janela, ouvinte de teclado, ouvinte de mouse, etc) e um ouvinte de 
evento tem a capacidade de ouvir eventos de seu grupo
Pode ter um
(ou mais)Componente
Visual
Objeto Ouvinte
de evento
Ouve determinados 
eventos (aqueles de seu 
grupo)
Executa determinado 
método quando acontece 
determinado evento de 
seu grupo.
Grupos de eventos
mouseDragged
mouseMoved
MouseMotion-
Adapter
MouseMotionListe-
ner
Eventos de mov. 
do mouse
mousePressed
mouseClicked
mouseRelesead
mouseEntered
mouseExited
MouseAdapterMouseListenerEventos de 
mouse
adjustmentValueChanged-AdjustmentListenerEvento de ajuste 
da pos. da barra 
de rolagem
actionPerformed-ActionListenerEvento de ação
MétodosSuperclasse 
adaptadora
Superclasse 
Interface
Grupo
Isaias Camilo Boratti
textValueChanged-TextListenerEventos de 
mudança de 
texto
componentAdded
componentRemoved
ContainerAd-
apter
ContainerListenerEvento de 
container
focusGained
focusLost
FocusAdapterFocusListenerEvento de foco
keyPressed
keyTyped
keyRelesead
KeyAdapterKeyListenerEvento de 
teclado
MétodosSuperclasse 
adaptadora
Superclasse 
Interface
Grupo
Isaias Camilo Boratti
windowOpened
windowActivated
windowDeactivated
windowIconefied
windowDeiconefied
windowClosing
windowClosed
WindowAdapterWindowListenerEventos de 
Janela
MétodosSuperclasse 
Adaptadora
Superclasse 
Interface
Grupo
-Veja que para cada grupo de eventos, existe uma classe interface que define 
quais métodos estão disponíveis. Na classe interface estes métodos são 
abstratos.
- Para facilitar, nas classes interfaces com mais de um método, Java 
disponibiliza uma superclasse adaptadora que implementa a respectiva classe 
interface e que portanto, contem a implementação de todos os métodos da 
respectiva classe interface. Na classe adaptadora os métodos são
implementados sem qualquer instrução. 
-Na declaração da classe relativa a um ouvinte de evento, o projetista pode 
declarar a mesma como subclasse de uma classe adaptadora e 
automaticamente todos os métodos daquele grupo de eventos estão 
implementados. Cabe ao projetista sobrepor aqueles métodos que julgar 
necessário. 
-Ou seja, cabe ao projetista sobrepor os métodos associados a eventos para os 
quais deseja que o componente visual que contem o ouvinte de evento reaja 
quando o evento acontecer.
Exercício: Escrever uma aplicação com interface gráfica que possibilite calcular a 
área de triângulos.
public class Triangulo
{ // Declaração dos atributos de instância
protected double base, altura, area;
// Declaração dos métodos construtores
public Triangulo()
{
}
public Triangulo( double vAltura, double vBase)
{
// implementar
}
/* Declaração de método de instância privado - só será visível dentro desta
classe */
private void calculeArea()
{ area = base*altura/2;
}
Isaias Camilo Boratti
// Declaração dos métodos de acesso
public double informeBase()
{ return base; }
public double InformeAltura()
{ return altura; }
public double informeArea()
{ return area; }
public void recebaValorBase( double vBase)
{ // implementar
}
public void recebaValorAltura( double vAltura)
{ // implementar
}
}
Objetos da classe 
JLabel
Objetos classe 
JTextField
Objetos classe 
JButton
Objeto da 
classe List
Objeto da classe 
JPanel
import java.awt.*; import java.awt.event.*;
import javax.swing.*; import javax.swing.border.*;
public class Janela extends JFrame
{ // Declaração/construção do objeto que representará o triangulo
Triangulo umT = new Triangulo();
// Declaração dos objetos componentes da janela
private JButton entrar;
private JButton fechar;
private JButton ver;
private JPanel meuPainel;
private JTextField saiArea;
private List saiAreas;
private JButton confirma;
private JButton cancela;
private JTextField entraBase;
private JTextField entraAltura;
private JLabel rBase,rAltura, rArea, rAreas;
// Declaração do construtor
public Janela() 
{ // ativação do construtor da superclassesuper("Cálculo de triângulos");
// definição do container
Container cont=this.getContentPane();
// definição do gerenciador de layout do container da janela
cont.setLayout(new FlowLayout() );
// construção dos componentes da janela
// construção do painel e seus componentes
meuPainel = new JPanel();
//definindo uma borda para o painel
Border linha = BorderFactory.createLineBorder(Color.blue);
//colocando um título na borda – outra borda com título
Border borda = BorderFactory.createTitledBorder(linha,"Entrada de dados" );
meuPainel.setBorder(borda);
Isaias Camilo Boratti
meuPainel.setLayout( new GridLayout(3,2));
/* para meuPainel foi definido um gerenciador de layout da classe 
GridLayout com 3 linhas e 2 colunas */
confirma = new JButton("Confirma");
confirma.setMnemonic('C'); // definição tecla de atalho
confirma.setEnabled(false);
cancela = new JButton("Cancela"); 
cancela.setEnabled(false);
rBase = new JLabel("Digite base");
rAltura = new JLabel("Digite altura");
entraBase = new JTextField(10); // define um componente de tamanho 10
entraBase.setColumns(12); // altera a quant. de colunas
entraBase.setEnabled(false);
entraAltura = new JTextField(10); 
entraAltura.setEnabled(false);
Isaias Camilo Boratti
//Adicionando os componentes ao painel - ordem de inserção
//será usada pelo gerenciador de layout
meuPainel.add(rBase); meuPainel.add(rAltura);
meuPainel.add(entraBase); meuPainel.add(entraAltura);
meuPainel.add(confirma); meuPainel.add(cancela);
// Construção dos demais componentes
entrar = new JButton("Entrar com novo triângulo");
entrar.setMnemonic('E');
// Define a cor de fundo do botão
entrar.setBackground(Color.red);
// Define a cor de frente do botão
entrar.setForeground(Color.blue);
// define uma nova cor - índice de vermelho,verde e azul
// cada argumento deve estar na faixa 0..255 - 0,0,0 corresponde a preto
Color novacor = new Color(150,50,167);
ver = new JButton("Ver área"); ver.setEnabled(false);
ver.setBackground(novacor);
fechar = new JButton("Fechar aplicação ");
fechar.setBackground(new Color(123,30,100));
// construção de um objeto da classe Font
// new Font( String nome, int estilo, int tamanho)
Font fonte = new Font("Serif",Font.ITALIC, 20);
saiArea = new JTextField(10); saiArea.setEditable(false);
saiArea.setFont(fonte);
saiAreas = new List();
rArea = new JLabel("Área");
// redefinindo o tamanho da fonte
fonte = rArea.getFont();
Font novaFonte = new Font(fonte.getName(), fonte.getStyle(), 
fonte.getSize()+10);
rArea.setFont(novaFonte);
Isaias Camilo Boratti
rAreas = new JLabel("Áreas já calculadas");
// adicionando os componentes ao container da janela
cont.add(meuPainel); cont.add(rArea); cont.add(saiArea); 
cont.add(ver); cont.add(entrar); cont.add(fechar);
cont.add(rAreas); cont.add(saiAreas);
// colocando uma barra de rolagem no componente saiAreas
cont.add(new JScrollPane(saiAreas));
//adicionando um ouvinte de evento ao botão cancela usando classe anônima
cancela.addActionListener (new ActionListener()
{ public void actionPerformed(ActionEvent e)
{entraBase.setText(""); entraAltura.setText("");
entraBase.setEnabled(false); entraAltura.setEnabled(false);
ver.setEnabled(false); entrar.setEnabled(true);
fechar.setEnabled(true); entrar.requestFocus();
}
} );
// construção de ouvinte de ação para os demais botões usando classe interna
ClasseOuvinteAcao ouvinteAcao = new ClasseOuvinteAcao();
// adicionando o ouvinte de açaõ a cada m dos demais botões
entrar.addActionListener(ouvinteAcao); ver.addActionListener(ouvinteAcao);
fechar.addActionListener(ouvinteAcao); 
confirma.addActionListener(ouvinteAcao);
// criando um ouvinte de teclado
ClasseOuvinteTeclado ouvinteTeclado = new ClasseOuvinteTeclado();
// adicionando ouvinte de teclado aos componentes entraBase e entraAltura
entraBase.addKeyListener(ouvinteTeclado);
entraAltura.addKeyListener(ouvinteTeclado);
// adicionando um ouvinte de janela a janela através classe anônima
this.addWindowListener ( new WindowAdapter()
{ public void windowClosing( WindowEvent e)
{ JOptionPane.showMessageDialog(null,"Fechando...");
System.exit(0);
}
});
// Definindo o tamanho da janela
this.setSize(650,250); //caso não especificado será assumido 0,0
} // final do construtor
// Declaração das classes internas
// Declaração da classe interna ClasseOuvinteAcao
public class ClasseOuvinteAcao implements ActionListener
{ public void actionPerformed( ActionEvent e )
{ // Definição de qual botão originou o evento e
if ( e.getSource() == fechar)
System.exit(0);
else
if ( e.getSource() == entrar )
{ ver.setEnabled(false); entrar.setEnabled(false);
fechar.setEnabled(false); entraBase.setEnabled(true);
entraAltura.setEnabled(true); entraBase.setText("");
entraAltura.setText("") ; entraBase.requestFocus();
confirma.setEnabled(true); cancela.setEnabled(true); 
}
else
if ( e.getSource() == ver)
{ saiArea.setText(Double.toString(umT.informeArea()));
saiAreas.addItem(saiArea.getText());
ver.setEnabled(false); entrar.setEnabled(true);
fechar.setEnabled(true); entrar.requestFocus();
}
else
if ( e.getSource() == confirma)
if (entraBase.getText().equals(""))
{JOptionPane.showMessageDialog(null," Faltou digitar base");
entraBase.requestFocus();}
else
if ( entraAltura.getText().equals(""))
{ JOptionPane.showMessageDialog(null,"Faltou digitar 
altura");
entraAltura.requestFocus();
}
Isaias Camilo Boratti
else
{ umT.recebaValorBase(Double.parseDouble(
entraBase.getText()));
umT.recebaValorAltura(Double.parseDouble(
entraAltura.getText())); 
ver.setEnabled(true); 
ver.requestFocus();
confirma.setEnabled(false);
cancela.setEnabled(false); 
entraBase.setEnabled(false);
entraAltura.setEnabled(false);
}
}
} // fim da classe interna ClasseOuvinteAcao
Isaias Camilo Boratti
public class ClasseOuvinteTeclado extends KeyAdapter
{ public void keyTyped( KeyEvent e)
{ // definição de qual caracter originou o evento e
char car = e.getKeyChar();
if ( !(Character.isDigit(car) || car==13 || car==8 || car =='.') )
{ JOptionPane.showMessageDialog(null,"Você digitou valor 
caracter inválido");
e.consume(); // acaba com o evento evitando que seja enviado 
// ao componente
} 
}
} // fim da classe interna ClasseOuvinteTeclado
} // fim da classe Janela
Isaias Camilo Boratti
public class Principal
{
public static void main(String[] argumentos)
{
Janela aplicacao = new Janela();
aplicacao.show();
}
}
Gerenciadores de Layout
São objetos responsáveis pelo gerenciamento do layout dos 
componentes dentro de um container. Um gerenciador de layout faz com que os 
componentes de um container sejam dispostos segundo determinada forma.
Principais classes : 
FlowLayout --> Os componentes são adicionados linha por linha, ou 
seja, são adicionados horizontalmente. Quando chegar ao final da linha passa-se 
automaticamente para o início da próxima linha.
GridLayout --> O container é dividido em linhas e colunas e cada 
componente é colocado em uma célula desta matriz (por linha).
BorderLayout --> Permite que se escolha onde se quer colocar o 
componente ( Center, North, South, East e West )
meuContainer = this.getContentPane();
meuContainer.setLayout(new BorderLayout());
meuContainer.add( meuBotao, “South” ); //coloca meuBotao no sul do container
Isaias Camilo Boratti
Object
Component
Container
Window JComponent
Frame
JFrame
Abstract Button
JComboBox
JLabel
JList
JMenuBar
JOptionPane
JPanel JTextComponent
JButton
JTextField JTextArea
Principais Métodos
Classe Object (java.lang.Object)
String toString() -->retorna um string que representa o objeto 
(nome do objeto + endereço)
Classe Component (java.awt.Component)
boolean isVisible() --> informa se o componente está ou não visível
void setVisible(boolean b) --> mostra ou oculta o componente
boolean isEnabled() --> informa se o componente está ou não ativo
void setEnabled(boolean b) --> ativa ou desativa o componente
void setBounds( int x, int y, int largura, int altura)
--> move e redimensiona o componente
void setLocation( int x, int y) --> Coloca o componente em nova posição
void setSize(int largura, int altura) --> dimensiona o componente
void setBackground(Color c) --> define a cor de fundo do componente
void setForeground ( Color c) --> define a cor do primeiro plano
void requestFocus() --> faz com que o componente receba o foco de entrada
void setFont (Font f) --> define a fonte do componente
Classe Container (java.awt.Container)
void add (Component c) --> adiciona o componente c ao container
void setLayout (LayoutManager layout) --> especifica o gerenciador de
layout do container
Classe Frame (java.awt.Frame)
void setResizable (boolean b) --> determina se o usuário pode ou não 
redimensionar a janela
void setTitle( String s ) --> define o texto a ser colocado na barra de título
Classe JFrame (javax.swing.JFrame)
Container getContentPane() --> retorna o objeto área de conteúdo
(container) da janela
Isaias Camilo Boratti
Classe JButton (javax.swing.JButton)
void setText (Strint texto) --> define o texto a ser exibido no botão
String getText() --> retorna o texto que o botão está exibindo
JButton (String t) --> constrói um botão com o texto t
Classe Jlabel (javax,swing.JLabel)
JLabel( String t) --> constrói um rótulo (etiqueta) com o texto t
void setText (String t) --> define um novo texto para o label (etiqueta)
String getText() ? retorna o texto do objeto label
Classe JTextComponent (javax.swing.JTextComponent)
void setText(String t) --> define um novo texto para o componente
String getText() --> retorna o texto contido no componente de texto
void setEditable(boolean b) --> determina se o usuário pode alterar ou não
o conteúdo do componente de texto
Classe JTextField (javax.swing.JTextField)
JTextField(int col) --> constrói uma instância vazia com col colunas
JTextField(String tex, int col) --> constrói uma instância com texto tex e com
col colunas
void setColumns(int col) --> define o número de colunas do comapo de texto
Classe JTextArea (javax.swing.JTextArea)
JTextArea(int lin, int col) --> constrói uma área de texto com lin linhas e col
colunas
JTextArea(String t, int lin, int col) --> constrói uma área de texto com lin
linhas, col colunas e com um texto inicial t
void setColumns (int col) --> define o número de colunas da área de texto
void setRows(int lin) --> define o número de linhas da área de texto
void append(String novo_texto) --> adiciona o texto novo_texto no final do
texto da área de texto
void insert(String t, int pos) --> insere o texto t na linha pos da área de texto
( a primeira linha é número zero)
Isaias Camilo Boratti
Classe JScrollPane (javax,swing.JScrollPane)
JScollPane(Component c) --> constrói uma área de rolagem que exibe o 
conteúdo do componente c. As barras de rolagem só aparecerão quando o 
componente for maior que a área de visualização.
Classe List (java.awt.List)
void addItem(String str) --> adiciona o string str a lista
String getItem(int pos) --> devolve o string da posição pos
int getItemCount() --> devolve a quantidade de itens da lista
void removeAll() --> remove todos os itens da lista
Classe Font (java.awt.Font)
Font(String nome, int estilo, int tamanho) --> Constrói uma instância da 
classe Font. O parâmetro nome define o nome da fonte (p.e. “Serif” ). O 
parâmetro estilo pode ser Font.PLAIN, Font.BOLD, Font.ITALIC ou 
Font.BOLD+Font.ITALIC. O parâmetro tamanho define o tamanho da fonte 
a ser construída
Isaias Camilo Boratti
String getFontName() --> devolve o nome da font que o objeto da classe 
Font tem.
Classe Color (java.awt.Color)
Color( int vermelho, int verde, int azul) --> Constrói um objeto da classe 
Color como uma mistura de vermelho, verde e azul. Os valores para os 
parâmetros devem estar na faixa 0..255.
Alguns atributos estáticos da classe Color que definem um valor de cor:
Color.black (preta); 
Color.blue (azul);
Color.green (verde);
Color.yellow (amarela); etc.
Exemplo: Color umaCor = Color.blue;

Outros materiais