Você está na página 1de 13

AULA TEÓRICA 11

Tema 5. Programação gráfica


Ø Interfaces gráficas.
Ø Criação da interface.
Ø Exploração de javax.swing

Adição de componentes à janela.


Ø Componente Rótulo
Ø Componente Botão
Ø Componentes campo de texto e senha

Elaborado por eng.Tatiana Kovalenko


Programação gráfica
É possível criar um programa Java que possa ser executado como aplicação
independente (stand-alone).

A interacção do usuário com uma aplicação pode ser feita de dois modos:
textual (através de um fluxo de entrada e saída de informações na forma de
texto simples) ou gráfico.

Hoje em dia várias aplicações comunicam com os seus utilizadores através de


interfaces gráficas (GUI – Graphical User Interface) constituídas por diversos
componentes como janelas, menus, botões, etc.

Uma GUI é desenvolvida utilizando-se componentes, que são objectos visuais


que possibilitam ao utilizador realizar a interacção com o programa por meio do
mouse e do teclado. Os componentes mais comuns são: rótulos, botões,
caixas de texto, áreas de texto, caixas de verificação, rádio botões, listas e
menus.

2
Criação da interface gráfica
A base fundamental da organização das interfaces gráficas é a janela. Um
programa pode conter uma única janela ou abrir diversas janelas ao mesmo
tempo, através das quais o utilizador possa realizar diferentes operações.
A classe JFrame do pacote javax.swing é a versão estendida da classe
java.awt e muito mais poderosa do que a classe Frame do pacote
java.awt.
Por default, a janela em Java tem 0 pixel de largura, 0 pixel de altura e não é
exibida.
A seguir estão apresentados dois exemplo de criação de uma janela vazia,
posicionada no canto esquerdo superior do ecrã com uso da classe JFrame da
biblioteca swing:

3
Algumas das características e comportamentos das janelas não necessitam de ser
programadas, pois já estão incluídas no código da classe Frame (botões minimizar,
maximizar, fechar, este último para funcionar tem que ser programado):
import javax.swing.*;
public class Janela1A extends JFrame
{ public Janela1A(String titulo)
{ setTitle(titulo);
setSize(300,200);
setLocationRelativeTo(null); //centraliza
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public static void main(String args[])
{ Janela1A j = new Janela1A("Janela1A"); }
}
Para poder terminar a execução da aplicação com o clique no botão close (X) do canto
direito superior da janela, utiliza se o seguinte método:
void setDefaultCloseOperation(int operacao);
onde o parâmetro operacao é uma das constantes:
JFrame.HIDE_ON_CLOSE somente oculta a janela, pode se abri-la de novo
JFrame.DISPOSE_ON_CLOSE destroi a janela, mas não termina o programa
JFrame.EXIT_ON_CLOSE termina chamando System.exit()
JFrame.DO_NOTHING_ON_CLOSE sem resposta automática, seu programa é 4
Containers e Componentes

5
Adição de componentes à janela
Componentes de janela são objectos que possuem uma representação gráfica e que
podem interagir com o utilizador e que possuem uma aparência e um comportamento.
Cada componente deve ser capaz de reagir às acções do utilizador, cada uma chamada
por evento, ao qual é associado uma resposta, uma acção.
Componente Rótulo (JLabel)
Os rótulos fornecem instruções de texto ou informações. Os rótulos são definidos com a
classe Jlabel (uma subclasse de Jcomponent). O rótulo exibe uma única linha de
texto somente de leitura, uma imagem ou tanto texto quanto imagem. Os programas
raramente alteram um conteúdo do rótulo depois de criá-lo.
import java.awt.*;
import javax.swing.*;
public class LabelTest extends JFrame
{ private JLabel label1, label2, label3;
private Container cont;
// configura a GUI
public LabelTest(String titulo)
{ setTitle(titulo); setLocationRelativeTo(null);
cont = getContentPane(); //obtém painel de conteúdo
cont.setLayout(new FlowLayout()); //configura seu layout
// construtor JLabel com um argumento do tipo String
label1 = new JLabel("Label com texto");
label1.setToolTipText("Isto é 1-o label"); 6
cont.add(label1);
Icon bug = new ImageIcon("picture.gif" );
// construtor JLabel com argumentos do tipo String, Icon e alinhamento à esq.
// implementaçao de interface Icon
label2 = new JLabel("Label com texto e icone",bug,
SwingConstants.LEFT);
label2.setToolTipText("Isto é 2-o label"); //exibe a dica
cont.add(label2); //adiciona rótulo ao painel de conteúdo
// construtor JLabel sem argumentos
label3 = new JLabel();
label3.setText("Label com icone e texto em baixo");
label3.setIcon(bug);
label3.setHorizontalTextPosition(SwingConstants.CENTER);
label3.setVerticalTextPosition(SwingConstants.BOTTOM);
label3.setFont(new Font("Serif", Font.BOLD|Font.ITALIC,16));
label3.setForeground(Color.red);
label3.setToolTipText("Isto é 3-o label");
cont.add(label3);
setSize(275, 170);
setVisible(true);
}

public static void main(String args[])


{ LabelTest aplic = new LabelTest(“Testando Jlabel”));
aplic.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 7
}}
O programa declara 3 referências JLabel. Os objectos JLabel são instanciados no
construtor. Ao executar esse programa, tente posicionar o mouse sobre cada rótulo para
ver sua dica de ferramenta.
Muitos componentes swing podem exibir imagens especificando um Icon como
argumento para seu construtor ou utilizando um método que normalmente é chamado
de setIcon. O Icon é uma interface (pacote javax.swing) e ImageIcon
implementa a interface Icon.
A classe ImageIcon (pacote javax.swing) suporta vários formatos de imagens (GIF,
PNG e JPEG (JPG)). O ficheiro picture.gif contém a imagem para carregar e
armazenar no objecto ImagemIcon. Pressupõe-se que esse ficheiro esteja no mesmo
directório que o programa. O objecto ImagemIcon é atribuído à referência bug.

A classe SwingConstants define um conjunto de constantes inteiras comuns (como


SwingConstants.LEFT) que são utilizadas com muitos componentes swing.

Por defeito, o texto aparece à direita da imagem quando um rótulo contém texto e
imagem. Os alinhamentos horizontal e vertical de um rótulo podem ser configurados
com os métodos setHorizontalTextPosition e setVerticalTextPosition,
respectivamente.

A classe JLabel fornece muitos métodos para configurar um rótulo depois que ele foi
instanciado (setText, getText, setIcon, getIcon, etc.).
8
Componente botão (classe JButton)

O botão é um componente em que o utilizador clica para activar uma acção específica.

O programa Java pode utilizar vários tipos de botões, incluindo botões de comando,
caixas de marcação, botões em alternativa e botões de opção.

Os botões são criados com a classe JButton. O texto na superfície de um botão


chama-se rótulo de botão.
O exemplo a seguir cria dois objectos da classe JButton e demonstra que JButtons
(como JLabels) suportam a exibição de ícones.

Para fornecer ao utilizador um nível extra de interactividade visual com a GUI, o


JButton também pode ter um Icon rollover – um Icon que é exibido quando o mouse é
posicionado sobre o botão. O ícone no botão muda quando o mouse se move para
dentro e para fora da área do botão na tela.

9
import javax.swing.*;
public class TestarBotoes1 extends JFrame
{ private JButton btnSimples, btnComIcone;
private Container cont;
public TestarBotoes1(String titulo)
{ setTitle(titulo); setLocationRelativeTo(null);
cont = getContentPane();
cont.setLayout(new FlowLayout());
// cria botoes
btnSimples = new JButton("Botao Simples");
cont.add(btnSimples);
Icon bug1 = new ImageIcon("bug1.gif");
Icon bug2 = new ImageIcon("bug2.gif");
btnComIcone = new JButton("Botao com Icone", bug1);
btnComIcone.setRolloverIcon(bug2);
cont.add(btnComIcone);
setSize(375,100);
setVisible(true);
}

public static void main(String args[])


{ TestarBotoes1 z = new TestarBotoes1(“Testando Botoes”);
z.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
} 10
}
Componentes JTextField e JPasswordField
JTextField e JPasswordField são áreas de uma única linha em que o texto pode
ser inserido pelo utilizador através do teclado ou o texto pode ser simplesmente exibido.
O JPasswordField mostra que um caracter foi digitado quando o utilizador insere os
caracteres, mas oculta os caracteres assumindo que eles representam uma senha.

import java.awt.*;
import javax.swing.*;
public class TextFieldTest extends JFrame
{ private JTextField campoTexto1, campoTexto2, campoTexto3;
private JPasswordField campoSenha;
private Container cont;

public TextFieldTest(String titulo)


{ setTitle(titulo);
cont = getContentPane(); setLocationRelativeTo(null);
cont.setLayout(new FlowLayout());
// constrói campo do texto
campoTexto1 = new JTextField(10); //define a largura do campo
11
cont.add(campoTexto1);
// constrói campo do texto com dimensoes default
campoTexto2= new JTextField("Enter text here");
cont.add(campoTexto2);

//constrói campo do texto com dimensoes default e tamanho 20


campoTexto3= new JTextField("Uneditable text field",20);
campoTexto3.setEditable(false);
cont.add(campoTexto3);

// constrói campo do texto com dimensoes default


campoSenha = new JPasswordField (”Uma senha");
cont.add(campoSenha);

setSize(325,100);
setVisible(true);
}

public static void main(String args[])


{ TextFieldTest aplic = new TextFieldTest(“Textando…”);
aplic.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}

12
Referência bibliográfica:
António José Mendes; Maria José Marcelino.
“Fundamentos de programação em Java 2”. FCA. 2002.
Elliot Koffman; Ursula Wolz.
“Problem Solving with Java”. 1999.
F. Mário Martins;
“Programação Orientada aos objectos em Java 2”, FCA, 2000,
John Lewis, William Loftus;
“Java Software Solutions: foundation of program design”, 2nd edition, Addision-Wesley

John R. Hubbard.
“Theory and problems of programming with Java”. Schaum’s Outline series. McGraw-Hill.
H. Deitel; P. Deitel.
“Java, como programar”. 4 edição. 2003. Bookman.
Rui Rossi dos Santos.
“Programando em Java 2– Teoria e aplicações”. Axcel Books. 2004

13