CLASSES DO PACOTE Swing

Propaganda
Material de Aulas Java-5
CLASSES DO PACOTE Swing
Inicialmente as classes disponíveis no Java apropriadas para a criação de aplicações gráficas
foram disponibilizadas no pacote AWT ( Abstract Window Tookit).
Na evolução, este pacote foi substituído pelo swing, pertencente a biblioteca JFC (Java
Foundation Classes), portanto o swing é uma extensão das classes da AWT, sendo parte
integrante do Java 2.
As classes swing possuem diversas vantagens e muitos aprimoramentos em relação as classes da
AWT – melhor aparência, melhor tratamento de eventos, recursos estendidos, entre outros.
A diferença básica entre as classes do swing em relação as do pacote AWT esta na presença da
letra (J) antes do inicio do nome da classe.
Ex. Para inserir um botão do pacote AWT, e usada a classe Button, já para usar um botão do
pacote swing, e usada a classe JButton. O mesmo vale para todas as classes do swing, pois todas
iniciam com (J).
As aplicações gráficas são aquelas que possibilitam a criação de uma GUI (Graphical User
Interface – Interface Gráfica do Usuário).
Ao desenvolver uma aplicação dotada de GUI, é necessário definir quais componentes serão
utilizados e qual a disposição que eles terão na janela. O swing possui inúmeras classes para
este objetivo.
Todas as classes swing são extensões do pacote AWT que por sua vez, são extensões da classe
java.lang.Objet ( a super classe de todas as classes do Java).
Todas as classes que usaremos, necessitarão de diversas classes externas, tanto do pacote swing
como do AWT. Por este motivo todos os programas terão três linhas com a diretiva import
apontando para as classes externas:
 import java.awt.*; - permite a utilização de diversas classes do pacote AWT,
além de possuir uma série de constantes numéricas.
 import java.awt.event.*; - usado para o processamento dos eventos que
ocorrerão na janela, tais como: Click no Mouse, Enter do campo texto, etc.
 import java.Swing.*; - permite a utilização de diversas classes do pacote swing.
Criação de Frames
Frame é o componente do pacote AWT responsável pela criação de janelas, parecidas com as
encontradas em aplicativos do ambiente Windows.
O componente frame gera uma janela com barra de título, bordas e pode ter outros componentes
em seu interior.
Prof. Walcyr
1
Material de Aulas Java-5
Exemplo:
Programa que mostra um frame com o título “Minha primeira Janela em Java”.
Toda aplicação gráfica
necessita utilizar as
funcionalidades da classe
JFrame, responsável por
controlar a exibição da
janela. (Herança).
Estes comandos se não forem
colocados, a janela do DOS não
poderia ser fechada pelo simples
pressionar do botão X
Resumo dos métodos mais utilizados da classe JFrame.
Método
JFrame()
getTitle()
is Resizable()
setResizable(boolean)
setTitle(String)
Função
Cria uma janela vazia
Obtém o título da janela
Verifica se a janela é ou não dimensionável
Especifica se a janela é ou não dimensionável
Especifica o título da janela
Inclusão de Textos e Imagens na Janela
Para a inclusão de texto nos frames, é necessária a utilização da classe JLabel. É possível
controlar várias propriedades do texto a ser utilizado, tais como: alinhamento, tipo de letra,
tamanho, cor, etc.
A declaração de um objeto JLabel no programa observa a seguinte sintaxe:
Prof. Walcyr
2
Material de Aulas Java-5
JLabel <nome do label> = new JLabel(“<texto do label>”,JLabel.<alinhamento>)
Para inclusão de imagens na janela, pode ser usada a classe ImageIcon por meio da sintaxe:
ImageIcon<nome do ícone> = new ImageIcon(“Caminho e nome da imagem a ser inserida>).
Ao inserir o caminho do arquivo, deve ser utilizada a barra normal (/).
A barra invertida (\) é considerada caractere reservado para a quebra de linha.
Exemplo de um programa que usa a classe JLabel para incluir textos e figuras em uma janela.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exemplo0902 extends JFrame
{
JLabel L1, L2, L3, L4;
ImageIcon icone = new ImageIcon("E:/Dados/FATEC/JAVA/Exemplos Sergio/painting.gif");
Exemplo0902()
{
setTitle("Inserindo Labels e Imagens na Janela");
setSize(350,120);
setLocation(50,50);
getContentPane().setBackground(new Color(220,220,220));
L1 = new JLabel(" Aprendendo",JLabel.LEFT);
L1.setForeground(Color.red);
L2 = new JLabel(icone);
L3 = new JLabel("Inserir ",JLabel.RIGHT);
L3.setForeground(Color.blue);
L4 = new JLabel("Labels e Imagens",icone,JLabel.CENTER);
L4.setFont(new Font("Serif",Font.BOLD,20));
L4.setForeground(Color.black);
getContentPane().setLayout(new GridLayout(4,1)); //Divide a Janela em 4 linhas e uma
coluna
getContentPane().add(L1);
getContentPane().add(L2);
getContentPane().add(L3);
getContentPane().add(L4);
}
public static void main(String args[])
{
JFrame Janela=new Exemplo0902();
Janela.show();
WindowListener x = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
Prof. Walcyr
3
Material de Aulas Java-5
{
System.exit(0);
}
};
Janela.addWindowListener(x);
}
}
Declaração dos objetos da
classe JLabel, utilizados para
armazenar e manipular o texto.
Eles são alinhados durante o
processo de inicialização por
meio de constantes inteiras prédefinidas pela linguagem
(JLabel.LEFT que equivale a
zero, JLabel.CENTER que
equivale a um e JLabel.RIGHT
que equivale a dois). Quando o
alinhamento não for
especificado, o default é à
esquerda.
Definição da cor da fonte do
objeto L1. Interpretada como
objeto L1 utilize a cor de fonte
(setForeground) vermelha.
Inicialização do Label L2 com
o objeto ícone.
Inicialização do Label L4 com
um texto e uma imagem.
Formatação do texto do Label
L4.
Ao usar o método add(), os
componentes são inseridos
linha a linha (de cima para
baixo).
No caso de frame com mais
de uma coluna, o
preenchimento seria:
linha1_coluna1 e assim por
diante.
Prof. Walcyr
Declaração de um ícone que
será usado em conjunto com
um label. O objeto ícone
está sendo declarado e
inicializado com o endereço
em que a imagem se localiza
a partir da unidade (E).
Definição da cor de fundo
da janela utilizando
setBackground. Os números
que aparecem referem se ao
padrão RGB (RedGreen_Blue) e definem as
tonalidades das cores
vermelha, verde e azul. Os
números para a tonalidade
podem variar de 0 a 255.
Todos os componentes visualizados nas janelas:
Labels, botões, caixas de texto, etc necessitam ser
inseridos em locais pré-definidos da janela,
conhecidos como células. Neste caso setLayout()
define o frame composto por uma grade de 4 linhas e
uma coluna (4.1).
Célula 1
Célula 2
Célula 3
Célula 4
4
Material de Aulas Java-5
Resumo dos métodos mais utilizados da classe JLabel:
Método
JLabel()
JLabel(String)
JLabel(String,int)
JLabel(String, image)
JLabel(String, image, int)
getText()
setText()
Função
Cria um Label sem texto
Cria um Label com o texto dado
Cria um Label com o texto e alinhamento dados
Cria um Label com o texto e imagem dados
Cria um Label com o texto, imagem e alinhamento dados
Obtém o texto do Label
Especifica o texto do Label
Inclusão de Botões nas Janelas
Para inclusão de botões nos frames, é utilizada a classe JButton. Da mesma forma que no JLabel,
muitas propriedades podem ser manipuladas em JButton. Observe o exemplo:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
Prof. Walcyr
5
Material de Aulas Java-5
public class Exemplo0903 extends JFrame implements ActionListener
{
JButton b1,b2;
ImageIcon icone = new ImageIcon("C:/Livros/Java/busca.gif");
public Exemplo0903()
{
setTitle("Inserindo botoes na janela");
setSize(350,100);
setLocation(50,50);
getContentPane().setBackground(new Color(180,180,180));
b1 = new JButton("Busca",icone);
b1.setHorizontalTextPosition(AbstractButton.LEFT);//posicao do texto
// b1.setVerticalTextPosition(AbstractButton.TOP);//posicao do texto
b1.setBackground(new Color(100,180,180));//cor de fundo do botão
b1.setForeground(Color.black);//cor do titulo do botão
b1.setFont(new Font("ScriptS",Font.BOLD,20)); //define a fonte do botão
b1.setEnabled(true);
b1.addActionListener(this);
b1.setToolTipText("Pressione aqui para realizar uma busca");
b1.setMnemonic(KeyEvent.VK_B);
// b1.setActionCommand("botao1");//define o nome da acao
b2 = new JButton("Cancelar");
b2.addActionListener(this);
b2.setMnemonic(KeyEvent.VK_C);
b2.setToolTipText("Pressione aqui para cancelar");
getContentPane().setLayout(new FlowLayout()); //gerenciador de layout
getContentPane().add(b1);
getContentPane().add(b2);
}
public void actionPerformed(ActionEvent e)
{ // metodo implementado pelo ActionListener
if (e.getSource()==b1)
{
System.out.println("Botao 1 pressionado");
}
if (e.getSource()==b2)
{
System.out.println("Botao 2 pressionado");
}
}
public static void main(String args[])
{
JFrame Janela = new Exemplo0903();
Prof. Walcyr
6
Material de Aulas Java-5
Janela.show();
//para fechar a janela
WindowListener x = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
Janela.addWindowListener(x);
}
}
Em qualquer aplicação em que as ações do usuário
devem ser interpretadas quando ele interagir com a
janela (clicar num botão, por exemplo), é
necessária a implementação de uma interface.
Um objeto do tipo botão também pode ser
inicializado com texto, imagem.
O método addActionListener(this) tem a função de
registrar o botão b1 para que um evento seja
gerado por ele.
Todo objeto inserido em um frame deve ser
registrado para que os eventos gerados por ele
sejam reconhecidos.
Adiciona uma letra sublinhada ao
título do botão e permite usar tecla
Alt juntamente com a letra em
substituição ao mouse.
setToolTipText – método para adicionar uma
mensagem ao botão. Pode ser usado em outros
tipos de botão (CheckBox, Radio,etc.).
O gerenciador FlowLayout()
possibilita que os componentes
sejam distribuídos em linhas, como
nos editores de texto.
Prof. Walcyr
7
Material de Aulas Java-5
Devido ao fato de não existir um método para cada evento dos
componentes de uma janela, dentro do método actionPerformed()
é necessário verificar qual dos componentes é responsável pela
geração do evento.
A letra (e) é declarada como um objeto da classe ActionEvent e
receberá todos os chamados aos eventos da janela.
Prof. Walcyr
8
Material de Aulas Java-5
Resumo dos métodos mais utilizados da classe JLabel:
Método
Button()
Button(String)
Button(String,Image)
getLabel()
setLabel(String)
setEnable(boolean)
setHorizontalTextPosition()
setMnemonic
setToolTipText
setVerticalTextPosition
Prof. Walcyr
Função
Cria um botão sem texto
Cria um botão com o texto dado
Cria um botão com o texto e imagem dados
Obtém o texto do botão
Especifica o texto do botão
Define se o botão está habilitado (true) ou desabilitado (false)
Define o tipo de alinhamento horizontal do texto em relação a
uma imagem. Pode assumir LEFT (esquerda) ou RIGHT
(direita).
Define uma letra que será usada como acionadora do evento
click, em conjunto com a tecla ALT.
Possibilita atrelar uma mensagem ao botão. Quando o ponteiro
do mouse estaciona sobre o botão, a mensagem é apresentada.
Define o tipo de alinhamento vertical do texto em relação a
uma imagem. Pode assumir TOP (topo) ou BOTTON (abaixo).
9
Material de Aulas Java-5
Inclusão de Caixas de Texto
Para inclusão de caixas de texto nos frames, é utilizada a classe JTextField que também possui
várias propriedades que podem ser modificadas.
O programa abaixo mostra o uso de caixas de texto e botão nos frames, solicitando o nome de
uma pessoa:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class C11EX04 extends JFrame {
JTextField TEXTO;
JLabel ROTULO;
public C11EX04() {
super("Formulário 4");
Container CONT = getContentPane();
JButton BOTAO = new JButton("OK");
TEXTO = new JTextField();
ROTULO = new JLabel("Texto");
setLayout(null);
CONT.add(TEXTO);
CONT.add(BOTAO);
CONT.add(ROTULO);
TEXTO.reshape(138,20,150,20);
BOTAO.reshape(138,50,70,20);
ROTULO.reshape(138,80,160,20);
Captura EVENTO = new Captura();
BOTAO.addActionListener(EVENTO);
setSize(427, 273);
setVisible(true);
}
private class Captura implements ActionListener {
Prof. Walcyr
10
Material de Aulas Java-5
public void actionPerformed(ActionEvent ae) {
String SAIDA = TEXTO.getText();
ROTULO.setText(SAIDA);
}
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
C11EX04 VISUAL = new C11EX04();
VISUAL.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
);
}
}
Prof. Walcyr
11
Material de Aulas Java-5
Definição da classe
Captura, que
implementa a partir
da interface
ActionListener o
controle das ações
executadas por um
usuário sobre os
componentes em
uso no formulário
ativo. Este evento é
responsável pela
ação do botão OK
quando ele é
disparado na
interface gráfica.
Quando o botão JButton() é acionado, ocorre um evento, que é
capturado e tratado pela classe Captura() que associa o evento
executado à variável objeto EVENTO.
O programa de exemplo demonstra uma simples calculadora em que o usuário digita 2 números
em 2 JTextFields e clica em um dos 4 botões existentes no frame (+,-,*e/) para realizar um
cálculo. Este exemplo agrupa as classe JFrame, JLabel e JButton estudadas até aqui.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exemplo0904 extends JFrame implements ActionListener, TextListener
{
JLabel L1,L2,L3;
JButton B1, B2, B3, B4, B5;
JTextField T1,T2,T3;
public static void main(String args[])
{
JFrame Janela=new Exemplo0904();
Janela.show();
//para fechar a janela
WindowListener x = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
Prof. Walcyr
12
Material de Aulas Java-5
System.exit(0);
}
};
Janela.addWindowListener(x);
}
Exemplo0904()
{
setTitle("Calculadora");
setSize(350,90);
setLocation(50,50);
getContentPane().setBackground(new Color(150,150,150));
getContentPane().setLayout(new GridLayout(3,4));
L1 = new JLabel("Num.1");
L1.setForeground(Color.black);
L1.setFont(new Font("",Font.BOLD,14));
L2 = new JLabel("Num.2");
L2.setForeground(Color.black);
L2.setFont(new Font("",Font.BOLD,14));
L3 = new JLabel("Total");
L3.setFont(new Font("",Font.BOLD,14));
B1 = new JButton ("+");
B1.addActionListener(this);
B2 = new JButton ("-");
B2.addActionListener(this);
B3 = new JButton ("x");
B3.addActionListener(this);
B4 = new JButton ("/");
B4.addActionListener(this);
B5 = new JButton ("Limpar"); B5.addActionListener(this);
B5.setBackground(Color.black);
B5.setForeground(Color.white);
T1 = new JTextField();
T2 = new JTextField();
T3 = new JTextField();
//
T1.addTextListener(this);
T3.setEditable(false); //define que o textField como somente leitura
getContentPane().add(L1);
getContentPane().add(T1);
getContentPane().add(B1);
getContentPane().add(B2);
getContentPane().add(L2);
getContentPane().add(T2);
getContentPane().add(B3);
getContentPane().add(B4);
getContentPane().add(L3);
getContentPane().add(T3);
getContentPane().add(B5);
}
public void actionPerformed(ActionEvent e)
Prof. Walcyr
13
Material de Aulas Java-5
{
if (e.getSource()==B5)
{
T1.setText(""); T2.setText(""); T3.setText("");
return;
}
float N1=0,N2=0,result=0;
try
{
N1 = Float.parseFloat(T1.getText());
N2 = Float.parseFloat(T2.getText());
}
catch (NumberFormatException erro)
{
T3.setText("Erro");
return;
}
if (e.getSource()==B1)
{ result = N1 + N2; }
if (e.getSource()==B2)
{ result = N1 - N2; }
if (e.getSource()==B3)
{ result = N1 * N2; }
if (e.getSource()==B4)
{ result = N1 / N2; }
T3.setText(""+result);
}
public void textValueChanged(TextEvent e)
{T3.setText("Ola");
}
}
Prof. Walcyr
14
Material de Aulas Java-5
Declaração de 3 caixas de texto
Prof. Walcyr
15
Material de Aulas Java-5
Inicialização e registro dos 5 botões usados na aplicação
Inicializam as caixas de texto em branco.
Adicionam todos os objetos à janela, na ordem que aparecem
Método actionPerformed utilizado para manipular
todas as ações da aplicação. Este método recebe um
Action Event para verificar e reconhecer qual foi o
objeto que disparou o evento.
Conversão dos valores digitados em numéricos
Para cada operação disponível na calculadora existe
um método e.getSource com a função de reconhecer o
evento gerado.
A variável result é utilizada para armazenar o resultado da operação escolhida,
porém trata-se de uma variável numérica que não pode ser inserida diretamente em
uma caixa de texto. Este método demonstra como é simples a conversão de número
em texto por meio de “”+result, ou seja, o resultado da operação é concatenado com
um texto vazio. Quando um número é concatenado com um texto, o resultado final
se transforma em texto.
Prof. Walcyr
16
Material de Aulas Java-5
A Tabela mostra um resumo dos métodos mais utilizados da classe JTextField
Método
JTextField()
JTextField(String)
JTextField(String,Int)
JTextField(int)
getText()
getSelectText()
isEditable()
selectAll()
setEditable(Boolean)
setText()
Função
Cria uma caixa de texto vazia
Cria uma caixa de texto com a string dada
Cria uma caixa de texto com a string e a quantidade de colunas
especificada.
Cria uma caixa de texto com a quantidade de colunas
especificada
Obtém o texto do objeto
Obtém o texto selecionado no objeto
Verifica se o componente é editável ou não
Seleciona todo o texto
Especifica se o componente é editável ou não
Especifica o texto a ser contido no componente
Inclusão de Caixas de Senha
Para inclusão de caixas de senha nos frames, é utilizada a classe JPasswordField.
O caractere default que aparece no momento da digitação é o (*), entretanto qualquer caractere
pode ser definido pelo método setEchoChar().
No exemplo de programa a seguir, é feita a verificação de senha e imprimirá uma mensagem
que mostra se a senha foi aceita ou não. A comparação é feita com a palavra JAVA.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
class Exemplo0905 extends JFrame implements ActionListener
{
JLabel L1,L2;
JTextField T1;
JPasswordField P1;
public static void main(String args[])
{
JFrame Janela=new Exemplo0905();
Janela.show();
//para fechar a janela
WindowListener x = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
Prof. Walcyr
17
Material de Aulas Java-5
};
Janela.addWindowListener(x);
}
Exemplo0905()
{
setTitle("Verifica Senha");
setSize(350,65);
getContentPane().setBackground(new Color(150,150,150));
getContentPane().setLayout(new GridLayout(2,2));
L1 = new JLabel("Digite a SENHA:");
L2 = new JLabel("Validacao:");
L1.setForeground(Color.black);
L2.setForeground(Color.black);
L1.setFont(new Font("",Font.BOLD,14));
L2.setFont(new Font("",Font.BOLD,14));
T1 = new JTextField();
T1.setForeground(Color.red);
P1 = new JPasswordField();
P1.setEchoChar('?');
P1.addActionListener(this); //registra o P1
getContentPane().add(L1);
getContentPane().add(P1);
getContentPane().add(L2);
getContentPane().add(T1);
}
public void actionPerformed(ActionEvent e)
{
if (P1.getText().equals("JAVA"))
T1.setText("Senha Valida");
else
T1.setText("Senha Invalida");
}
}
Prof. Walcyr
18
Material de Aulas Java-5
Declaração de P1 como sendo um objeto da classe JPasswordField
Inicialização do objeto JPasswordField P1 com conteúdo vazio, igual
como é feito com um objeto do tipo JTextField.
Define o caractere que substituirá o caractere digitado. Se esta linha
não for declarada, o caractere (*) será usado.
Registra o objeto P1 para gerar um evento, da mesma forma que um
botão é registrado. Esse evento será gerado quando um usuário
pressionar ENTER quando o foco estiver sobre o objeto P1.
Prof. Walcyr
19
Material de Aulas Java-5
Formatação de Caixas de Texto
Em muitos casos torna-se necessário realizar formatação de caixas de texto,
principalmente quando valores numéricos são inseridos.
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.text.NumberFormat;
class Exemplo0906 extends JFrame implements ActionListener
{
JTextField T1,T2;
double valor1 = 1000.54;
int valor2 = 100;
NumberFormat df1,df2;
public static void main(String args[])
{
JFrame Janela=new Exemplo0906();
Janela.show();
WindowListener x = new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
};
Janela.addWindowListener(x);
}
Exemplo0906()
{
setTitle("Formatando numero");
setSize(350,65);
getContentPane().setBackground(new Color(150,150,150));
getContentPane().setLayout(new GridLayout(1,2));
df1 = NumberFormat.getNumberInstance();
df1.setMinimumFractionDigits(4);
df2 = NumberFormat.getNumberInstance();
df2.setMinimumFractionDigits(2);
T1 = new JTextField();
T2 = new JTextField();
T1.setText(""+df1.format(valor1));
T2.setText(""+df2.format(valor2));
getContentPane().add(T1);
Prof. Walcyr
20
Material de Aulas Java-5
getContentPane().add(T2);
}
public void actionPerformed(ActionEvent e)
{}
}
Importação da classe NumberFormat para formatação de números
Declaração de 2 objetos df1 e df2 que serão instâncias da classe
NumberFormat
Inicialização dos objetos df1 e df2 com a instância default da máquina
do usuário, definida pelo S.O. O Windows por exemplo, define estas
características por meio do painel de controle.
Os comandos posteriores definem a quantidade de casas decimais.
Formatação do número de acordo com o formato definido pelo método
format.
Aplicação Contextualizada
O programa a seguir baseado no C04EX01 que faz a solicitação do nome, da idade e da altura
de uma pessoa é apresentado na versão gráfica.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class C11EX05 extends JFrame {
JTextField TEXT1;
JTextField TEXT2;
JTextField TEXT3;
JLabel ROTUL1;
JLabel ROTUL2;
JLabel ROTUL3;
Prof. Walcyr
21
Material de Aulas Java-5
public C11EX05() {
super("Ficha Biométrica");
Container CONT = getContentPane();
JLabel ROTUL4 = new JLabel("Nome:");
JLabel ROTUL5 = new JLabel("Idade:");
JLabel ROTUL6 = new JLabel("Altura:");
TEXT1 = new JTextField();
TEXT2 = new JTextField();
TEXT3 = new JTextField();
JButton BOTAO = new JButton("OK");
JLabel ROTUL7 = new JLabel("Nome:");
JLabel ROTUL8 = new JLabel("Idade:");
JLabel ROTUL9 = new JLabel("Altura:");
ROTUL1 = new JLabel();
ROTUL2 = new JLabel();
ROTUL3 = new JLabel();
setLayout(null);
CONT.add(ROTUL4);
CONT.add(ROTUL5);
CONT.add(ROTUL6);
CONT.add(TEXT1);
CONT.add(TEXT2);
CONT.add(TEXT3);
CONT.add(BOTAO);
CONT.add(ROTUL7);
CONT.add(ROTUL8);
CONT.add(ROTUL9);
CONT.add(ROTUL1);
CONT.add(ROTUL2);
CONT.add(ROTUL3);
ROTUL4.reshape(30,20,150,20);
ROTUL5.reshape(30,50,150,20);
Prof. Walcyr
22
Material de Aulas Java-5
ROTUL6.reshape(30,80,150,20);
TEXT1.reshape(80,20,150,20);
TEXT2.reshape(80,50,150,20);
TEXT3.reshape(80,80,150,20);
BOTAO.reshape(95,110,70,20);
ROTUL7.reshape(30,140,150,20);
ROTUL8.reshape(30,170,150,20);
ROTUL9.reshape(30,200,150,20);
ROTUL1.reshape(80,140,150,20);
ROTUL2.reshape(80,170,150,20);
ROTUL3.reshape(80,200,150,20);
AcionaBotao EVENTO = new AcionaBotao();
BOTAO.addActionListener(EVENTO);
setSize(273, 273);
setVisible(true);
}
private class AcionaBotao implements ActionListener {
public void actionPerformed(ActionEvent ae) {
String NOME = TEXT1.getText();
String IDADE = TEXT2.getText() + " anos";
String ALTURA = TEXT3.getText();
ROTUL1.setText(NOME);
ROTUL2.setText(IDADE);
ROTUL3.setText(ALTURA);
}
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
C11EX05 VISUAL = new C11EX05();
VISUAL.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Prof. Walcyr
23
Material de Aulas Java-5
}
}
);
}
}
Prof. Walcyr
24
Material de Aulas Java-5
O programa C04EX02 que calcula o salário líquido de um profissional que trabalhe por hora foi
agora transformado em interface gráfica.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.text.*;
import java.text.DecimalFormat;
public class C11EX07 extends JFrame {
JTextField TEXT1;
JTextField TEXT2;
JTextField TEXT3;
JLabel ROTUL1;
JLabel ROTUL2;
JLabel ROTUL3;
public C11EX07() {
super("Salário");
Container CONT = getContentPane();
Prof. Walcyr
25
Material de Aulas Java-5
JLabel ROTUL4 = new JLabel("Entre horas trabalhadas:");
JLabel ROTUL5 = new JLabel("Entre valor da hora:");
JLabel ROTUL6 = new JLabel("Entre percentual de desconto:");
TEXT1 = new JTextField();
TEXT2 = new JTextField();
TEXT3 = new JTextField();
TEXT1.setDocument(new AceitaVlrNumFloat());
TEXT2.setDocument(new AceitaVlrNumFloat());
TEXT3.setDocument(new AceitaVlrNumFloat());
JButton BOTAO = new JButton("OK");
JLabel ROTUL7 = new JLabel("Salário Bruto::");
JLabel ROTUL8 = new JLabel("Desconto:");
JLabel ROTUL9 = new JLabel("Salário Liquido:");
ROTUL1 = new JLabel();
ROTUL2 = new JLabel();
ROTUL3 = new JLabel();
setLayout(null);
CONT.add(ROTUL4);
CONT.add(ROTUL5);
CONT.add(ROTUL6);
CONT.add(TEXT1);
CONT.add(TEXT2);
CONT.add(TEXT3);
CONT.add(BOTAO);
CONT.add(ROTUL7);
CONT.add(ROTUL8);
CONT.add(ROTUL9);
CONT.add(ROTUL1);
CONT.add(ROTUL2);
CONT.add(ROTUL3);
ROTUL4.reshape(30,20,170,20);
ROTUL5.reshape(30,50,170,20);
ROTUL6.reshape(30,80,170,20);
TEXT1.reshape(217,20,150,20);
Prof. Walcyr
26
Material de Aulas Java-5
TEXT2.reshape(217,50,150,20);
TEXT3.reshape(217,80,150,20);
BOTAO.reshape(30,110,70,20);
ROTUL7.reshape(30,140,150,20);
ROTUL8.reshape(30,170,150,20);
ROTUL9.reshape(30,200,150,20);
ROTUL1.reshape(217,140,150,20);
ROTUL2.reshape(217,170,150,20);
ROTUL3.reshape(217,200,150,20);
AcionaBotao EVENTO = new AcionaBotao();
BOTAO.addActionListener(EVENTO);
setSize(410, 273);
setVisible(true);
}
public class AceitaVlrNumFloat extends PlainDocument {
public void insertString(int VLR, String TXT, AttributeSet ATRIB)
throws BadLocationException {
char CARACTERE;
byte NUMERO = 1, I = 0;
for (I = 0; I < TXT.length(); I++) {
CARACTERE = TXT.charAt(I);
if (!Character.isDigit(CARACTERE) & CARACTERE != '.')
NUMERO = 0;
}
if(NUMERO != 0)
super.insertString(VLR, TXT, ATRIB);
}
}
private class AcionaBotao implements ActionListener {
public void actionPerformed(ActionEvent ae) {
float HT, VH, PD, TD, SB, SL;
DecimalFormat df = new DecimalFormat("0.00");
String SHT = TEXT1.getText();
String SVH = TEXT2.getText();
String SPD = TEXT3.getText();
Prof. Walcyr
27
Material de Aulas Java-5
HT = Float.valueOf(SHT).floatValue();
VH = Float.valueOf(SVH).floatValue();
PD = Float.valueOf(SPD).floatValue();
SB = HT * VH;
TD = (PD / 100) * SB;
SL = SB - TD;
ROTUL1.setText(String.valueOf(df.format(SB)));
ROTUL2.setText(String.valueOf(df.format(TD)));
ROTUL3.setText(String.valueOf(df.format(SL)));
}
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
C11EX07 VISUAL = new C11EX07();
VISUAL.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
);
}
}
Prof. Walcyr
28
Material de Aulas Java-5
Método showMessageDialog
É muito comum a necessidade de transmitir mensagem de erro ou avisos. Para usar este recurso
utiliza-se o método showMessageDialog() pertencente à classe JOptionPane.
Este método possibilita a definição entre 2 e 6 parâmetros devido a seu recurso de sobrecarga.
Para usar este método, com 2 parâmetros, consideraremos o programa C05EX04 que apresenta
a mensagem O valor está entre 20 e 90, caso o valor fornecido esteja nesta faixa. Caso contrário
apresenta O valor não está entre 20 e 90.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.text.*;
public class C12EX01 extends JFrame {
JTextField TEXT1;
public C12EX01() {
super("Validação Numérica");
Container CONT = getContentPane();
Prof. Walcyr
29
Material de Aulas Java-5
JLabel ROTUL1 = new JLabel("Entre um valor numérico inteiro:");
TEXT1 = new JTextField();
JButton BOTAO = new JButton("OK");
TEXT1.setDocument(new AceitaVlrNumInt());
setLayout(null);
CONT.add(ROTUL1);
CONT.add(TEXT1);
CONT.add(BOTAO);
ROTUL1.reshape(30,30,185,20);
TEXT1.reshape(225,30,50,20);
BOTAO.reshape(120,80,70,20);
AcionaBotao EVENTO = new AcionaBotao();
BOTAO.addActionListener(EVENTO);
setSize(310, 160);
setVisible(true);
}
public class AceitaVlrNumInt extends PlainDocument {
public void insertString(int VLR, String TXT, AttributeSet ATRIB)
throws BadLocationException {
char CARACTERE;
byte NUMERO = 1, I = 0;
for (I = 0; I < TXT.length(); I++) {
CARACTERE = TXT.charAt(I);
if (!Character.isDigit(CARACTERE))
NUMERO = 0;
}
if(NUMERO != 0)
super.insertString(VLR, TXT, ATRIB);
}
}
private class AcionaBotao implements ActionListener {
public void actionPerformed(ActionEvent ae) {
int NUMERO;
String SNUM = TEXT1.getText(), TEXTO;
Prof. Walcyr
30
Material de Aulas Java-5
NUMERO = Integer.valueOf(SNUM).intValue();
if (NUMERO >= 20 && NUMERO <= 90) {
TEXTO = "O valor está entre 20 e 90";
JOptionPane.showMessageDialog(null, TEXTO); }
else {
TEXTO = "O valor não está entre 20 e 90";
JOptionPane.showMessageDialog(null, TEXTO);
}
}
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
C12EX01 VISUAL = new C12EX01();
VISUAL.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
);
}
}
Prof. Walcyr
31
Material de Aulas Java-5
Prof. Walcyr
32
Material de Aulas Java-5
Método showInputDialog
Componente muito útil para entrada de dados, pertencente a classe JOptionPane.
Para mostrar sua funcionalidade vamos ver o programa abaixo que faz a leitura de dois valores
inteiros e apresenta o resultado com adição dos valores lidos.
import javax.swing.*;
public class C12EX03 {
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JDialog.setDefaultLookAndFeelDecorated(true);
String SN1, SN2;
int N1, N2, R;
SN1 = JOptionPane.showInputDialog("Entre o 1o. valor:");
SN2 = JOptionPane.showInputDialog("Entre o 2o. valor:");
N1 = Integer.parseInt(SN1);
N2 = Integer.parseInt(SN2);
R = N1 + N2;
JOptionPane.showMessageDialog(null,
"Adição = " + R, "Resultado", 1);
System.exit(0);
}
}
);
}
}
Prof. Walcyr
33
Material de Aulas Java-5
Prof. Walcyr
34
Material de Aulas Java-5
Método showConfirmDialog
Tem como finalidade apresentar uma caixa de confirmação para diversas aplicações, em que
seja necessário obter uma resposta de confirmação ou não do usuário.
As combinações possíveis de botões para este método são:
Yes / No; Yes / No / Cancel e OK / Cancel.
Para mostrar o uso do método showConfirmDialog com botões Yes e No vejamos o programa
abaixo que solicita a entrada de 2 valores numéricos inteiros e apresenta como resultado o valor
da multiplicação dos mesmos.
import javax.swing.*;
public class C12EX05 {
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JDialog.setDefaultLookAndFeelDecorated(true);
String SN1, SN2;
int N1, N2, R, RESP;
Prof. Walcyr
35
Material de Aulas Java-5
do {
SN1 = JOptionPane.showInputDialog
("Entre o 1o. valor:");
if (SN1 == null)
N1 = 0;
else
N1 = Integer.parseInt(SN1);
SN2 = JOptionPane.showInputDialog
("Entre o 2o. valor:");
if (SN2 == null)
N2 = 0;
else
N2 = Integer.parseInt(SN2);
R = N1 * N2;
JOptionPane.showMessageDialog(null,"Multiplicação = "
+ R, "Resultado", 1);
RESP = JOptionPane.showConfirmDialog(null,
"Deseja mais cálculo?", "Resposta",
JOptionPane.YES_NO_OPTION); }
while (RESP == JOptionPane.YES_OPTION);
System.exit(0);
}
}
);
}
}
Prof. Walcyr
36
Material de Aulas Java-5
Prof. Walcyr
37
Material de Aulas Java-5
Prof. Walcyr
38
Material de Aulas Java-5
A linha de comando:
RESP = JOptionPane.showConfirmDialog(null,
"Deseja mais cálculo?", "Resposta",
JOptionPane.YES_NO_OPTION);
Retorna como resposta um valor int atribuído à variável RESP. O parâmetro
JOptionPane.YES_NO_OPTION efetua a apresentação dos botões Yes e No.
Este parâmetro pode ser configurado de 3 formas diferentes:
1. A constante YES_NO_OPTION da classe JOptionPane, apresenta os botões de resposta
Yes, No. Em substituição ao valor definido para a classe constante
JOptionPane.YES_NO_OPTION, pode-se usar o valor numérico 0 (zero).
2. A constante YES_NO_CANCEL_OPTION da classe JOptionPane, apresenta os botões
de resposta Yes, No e Cancel. Em substituição ao valor definido para a classe constante
JOptionPane.YES_NO_CANCEL_OPTION, pode-se usar o valor numérico 1 (um).
3. A constante OK_CANCEL_OPTION da classe JOptionPane, apresenta os botões de
resposta OK e Cancel. Em substituição ao valor definido para a classe constante
JOptionPane.OK_CANCEL_OPTION, pode-se usar o valor numérico 2 (dois).
Ao selecionar o botão apresentado na caixa de confirmação, ele gera um valor para representar a
sua ação. O valor obtido a partir do acionamento de um dos botões é verificado na linha de
comando while (RESP == JOptionPane.YES_OPTION); Observe o uso da constante
YES_OPTION, indicando que se ocorrer a seleção do botão YES, o programa continua a repetir
sua ação; caso contrário, o programa é encerrado.
Para a tomada de decisões é possível usar algumas variações das constantes de verificação
definidas:
a) A constante YES_OPTION da classe JOptionPane permite verificar se o botão Yes foi
acionado. Podendo-se também usar o valor numérico 0 (zero).
b) A constante NO_OPTION da classe JOptionPane permite verificar se o botão No foi
acionado. Podendo-se também usar o valor numérico 1 (um).
c) A constante CANCEL_OPTION da classe JOptionPane permite verificar se o botão
Cancel foi acionado. Podendo-se também usar o valor numérico 2 (dois).
d) A constante OK_OPTION da classe JOptionPane permite verificar se o botão OK foi
acionado. Podendo-se também usar o valor numérico 0 (zero).
Observar que as constantes YES_OPTION e OK_OPTION da classe JOptionPane retornam
ambas o valor 0 (zero).
Para testar as condições, usando o valor numérico 0 (zero) alteraremos o programa C12EX05 na
linha de comando RESP, conforme programa C12EX06 a seguir.
Prof. Walcyr
39
Material de Aulas Java-5
import javax.swing.*;
public class C12EX06 {
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JDialog.setDefaultLookAndFeelDecorated(true);
String SN1, SN2;
int N1, N2, R, RESP;
do {
SN1 = JOptionPane.showInputDialog
("Entre o 1o. valor:");
if (SN1 == null)
N1 = 0;
else
N1 = Integer.parseInt(SN1);
SN2 = JOptionPane.showInputDialog
("Entre o 2o. valor:");
if (SN2 == null)
N2 = 0;
else
N2 = Integer.parseInt(SN2);
R = N1 * N2;
JOptionPane.showMessageDialog(null,"Multiplicação = "
+ R, "Resultado", 1);
RESP = JOptionPane.showConfirmDialog(null,
"Deseja mais cálculo?", "Resposta", 0); }
while (RESP == 0);
System.exit(0);
}
}
);
}
}
Prof. Walcyr
40
Material de Aulas Java-5
Método showOptionDialog
Outra opção de comunicação com o usuário é a caixa de opção, a qual possui uma flexibilidade
diferente das caixas de mensagem e da caixa de confirmação. Para usar este recurso deve-se
utilizar o método showOptionDialog() pertencente a classe JOptionPane.
Para usarmos este método desenvolveremos o programa abaixo que solicita a entrada de 2
valores numéricos inteiros e apresenta como resultado o quociente inteiro dos mesmos.
import javax.swing.*;
public class C12EX07 {
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JDialog.setDefaultLookAndFeelDecorated(true);
Object[] OPCAO = { "Sim", "Não" };
String SN1, SN2;
int N1, N2, R, RESP;
do {
Prof. Walcyr
41
Material de Aulas Java-5
SN1 = JOptionPane.showInputDialog
("Entre o 1o. valor:");
if (SN1 == null)
N1 = 0;
else
N1 = Integer.parseInt(SN1);
SN2 = JOptionPane.showInputDialog
("Entre o 2o. valor:");
if (SN2 == null)
N2 = 0;
else
N2 = Integer.parseInt(SN2);
R = N1 / N2;
JOptionPane.showMessageDialog(null,"Divisão = "
+ R, "Resultado", 1);
RESP = JOptionPane.showOptionDialog(null,
"Deseja mais cálculo?", "Resposta", JOptionPane.DEFAULT_OPTION,
JOptionPane.WARNING_MESSAGE, null, OPCAO, OPCAO[0]); }
while (RESP == JOptionPane.YES_OPTION);
System.exit(0);
}
}
);
}
}
Prof. Walcyr
42
Material de Aulas Java-5
Prof. Walcyr
43
Material de Aulas Java-5
Um dos pontos importantes deste programa é a linha de comando Object[] OPCAO = {"Sim",
"N"}; na qual é definido um objeto array denominado OPCAO com 2 valores possíveis Sim e
Não.
Prof. Walcyr
44
Material de Aulas Java-5
Método JRadioButton
Proporciona a definição de um conjunto de opções por meio de botões de opção. Apenas uma
das opções definidas é acionada para uma ação a ela relacionada seja executada.
Para testar este método, vejamos o programa abaixo que solicita o nome de uma pessoa e sugere
que ela selecione o seu sexo. Depois o programa apresenta uma mensagem apropriada de
saudação para o sexo selecionado.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class C12EX08 extends JFrame {
JTextField TEXT1;
JRadioButton RADIO1 = new JRadioButton("Masculino",true);
JRadioButton RADIO2 = new JRadioButton("Feminino");
public C12EX08() {
super("Atendimento");
Container CONT = getContentPane();
ButtonGroup GRUPO = new ButtonGroup();
JLabel ROTUL1 = new JLabel("Entre seu nome:");
JLabel ROTUL2 = new JLabel("Selecione seu sexo:");
TEXT1 = new JTextField();
JButton BOTAO = new JButton("OK");
setLayout(null);
GRUPO.add(RADIO1);
GRUPO.add(RADIO2);
CONT.add(ROTUL1);
CONT.add(TEXT1);
CONT.add(ROTUL2);
CONT.add(RADIO1);
CONT.add(RADIO2);
CONT.add(BOTAO);
ROTUL1.reshape(30,30,110,20);
TEXT1.reshape(160,30,100,20);
Prof. Walcyr
45
Material de Aulas Java-5
ROTUL2.reshape(30,60,130,20);
RADIO1.reshape(160,60,100,20);
RADIO2.reshape(160,80,100,20);
BOTAO.reshape(120,120,70,20);
AcionaBotao EVENTO = new AcionaBotao();
BOTAO.addActionListener(EVENTO);
setSize(310, 200);
setVisible(true);
}
private class AcionaBotao implements ActionListener {
public void actionPerformed(ActionEvent ae) {
String TEXTO;
if (RADIO1.isSelected() == true) {
TEXTO = "Olá, Senhor \n" + TEXT1.getText();
JOptionPane.showMessageDialog(
null, TEXTO, "Saudação para homem", 1
);
}
if (RADIO2.isSelected() == true) {
TEXTO = "Olá, Senhora \n" + TEXT1.getText();
JOptionPane.showMessageDialog(
null, TEXTO, "Saudação para mulher", 1
);
}
TEXT1.setText("");
TEXT1.requestFocus();
}
}
public static void main(String args[]) {
javax.swing.SwingUtilities.invokeLater(
new Runnable() {
public void run() {
JFrame.setDefaultLookAndFeelDecorated(true);
JDialog.setDefaultLookAndFeelDecorated(true);
C12EX08 VISUAL = new C12EX08();
VISUAL.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Prof. Walcyr
46
Material de Aulas Java-5
}
}
);
}
}
Definição das variáveis do tipo objeto RADIO1 e RADIO2. A variável RADIO1 é
instanciada a partir de JRadioButton("Masculino",true), de forma que essa opção,
quando apresentada, estará automaticamente selecionada.
Prof. Walcyr
47
Material de Aulas Java-5
O código TEXT1.setText(""); faz a limpeza com um branco
sobre o componente manipulado pela variável TEXT1.
O código TEXT1.requestFocus(); pelo método requestFocus()
devolve para o componente o foco (cursor) para a variável
TEXT1.
Prof. Walcyr
48
Download