Buscar

unidade_3

Prévia do material em texto

0 
 
Práticas de programação 
1 
 
 
Autor(a): Eduardo Felipe Zambom Santana 
Curso Superior de Tecnologia em Gestão da Tecnologia da 
Informação 
Coordenador: Emerson dos Santos Paduan 
São Paulo - 2016 
 
2 
Sumário 
1.Tratamento de eventos ............................................................................................... 3 
1.1. Campos de texto ................................................................................................................. 3 
1.2. Botões ..................................................................................................................................... 5 
1.3. Campos de seleção ............................................................................................................. 7 
1.4. Leitura obrigatória .............................................................................................................. 9 
1.5. Leitura opcional .................................................................................................................. 9 
2. Gerenciadores de layout 10 ................................................................................... 10 
2.1. Leitura obrigatória ............................................................................................................ 13 
2.2. Leitura opcional ................................................................................................................ 13 
3. Exercícios ..................................................................................................................... 14 
4. Referências Bibliográficas ...................................................................................... 15 
 
3 
1.Tratamento de eventos 
Na unidade anterior foi visto como criar interfaces gráficas, porém essas inter-
faces ainda não possuem nenhuma ação. Para resolver esse problema, vamos 
ver como criar e tratar eventos nessas interfaces utilizando alguns componen-
tes que vimos na unidade anterior, como o Botão (JButton), o Campo de Texto 
(JTextField) e o Campo de Seleção (JComboCox). 
Para tratar os eventos em uma interface gráfica, utilizaremos uma classe inter-
na, que é a declaração de uma classe dentro de outra. O quadro a seguir mos-
tra um exemplo desse tipo de declaração. 
 
 
1.1. Campos de texto 
Em campos de texto (JTextField), é possível programar diversos eventos, como, 
por exemplo, verificar se o texto que um usuário está digitando é válido, ou 
para exibir em um campo os dados que estão sendo digitados em outro. O 
quadro a seguir mostra o código do exemplo em que o texto de um campo de 
texto chamado texto1 é copiado para o campo de texto chamado texto2. 
package exemplos; 
 
public class ExemploClasseInterna { 
 
 public void metodo() { 
 Soma soma = new Soma(5, 3); 
 soma.soma(); 
 } 
 
 public class Soma { 
 
 private int x; 
 private int y; 
 
 public Soma(int x, int y) { 
 this.x = x; 
 this.y = y; 
 } 
 
 public void soma() { 
 System.out.println(x + y); 
 } 
 } 
} 
 
4 
 
A figura a seguir mostra o programa sendo executado. 
package exemplos; 
 
import java.awt.GridLayout; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
 
import javax.swing.JFrame; 
import javax.swing.JTextField; 
 
public class Exemplo1 { 
 
 JTextField texto1; 
 JTextField texto2; 
 
 public static void main(String args[]) { 
 Exemplo1 exemplo = new Exemplo1(); 
 exemplo.criaTela(); 
 } 
 
 public void criaTela() { 
 JFrame frame = new JFrame("Teste campo de 
texto!"); 
 frame.setSize(400, 300); 
 
 GridLayout grid = new GridLayout(1, 2); 
 frame.setLayout(grid); 
 
 Evento evento = new Evento(); 
 
 texto1 = new JTextField(); 
 texto1.addActionListener(evento); 
 frame.add(texto1); 
 
 texto2 = new JTextField(); 
 frame.add(texto2); 
 
 frame.setVisible(true); 
 } 
 
 public class Evento implements ActionListener { 
 @Override 
 public void actionPerformed(ActionEvent e) { 
 texto2.setText(texto1.getText()); 
 
 } 
 } 
 
} 
 
5 
 
 
1.2. Botões 
O componente que normalmente tem o evento mais importante na tela de 
uma interface gráfica é o botão. Por exemplo, em uma tela de cadastro de um 
usuário do sistema, o botão cadastrar é o que efetivamente realiza a tarefa de 
cadastrar o usuário. Também é possível ter mais de um botão na tela, como, 
por exemplo, o botão Cancelar, que faz o usuário voltar para a tela inicial da 
aplicação, ou o botão Limpar Campos, que limpa os campos para que o usuá-
rio digite outros valores no formulário. O quadro a seguir mostra o código de 
uma interface com dois botões: um para cadastrar uma pessoa e outro para 
limpar os campos da tela de cadastro. 
 
6 
 
A figura a seguir mostra o programa desse código sendo executado. 
package exemplos; 
 
 
public class Exemplo2 { 
 
 JTextField texto1; 
 JButton botao1; 
 
 public static void main(String args[]) { 
 Exemplo2 exemplo = new Exemplo2(); 
 exemplo.criaTela(); 
 } 
 
 public void criaTela() { 
 JFrame frame = new JFrame(); 
 
 GridLayout grid = new GridLayout(1, 2); 
 frame.setLayout(grid); 
 
 Evento evento = new Evento(); 
 
 texto1 = new JTextField(); 
 frame.add(texto1); 
 
 botao1 = new JButton(); 
 botao1.setText("Clique Aqui!"); 
 botao1.addActionListener(evento); 
 frame.add(botao1); 
 
 frame.setSize(300, 100); 
 frame.setVisible(true); 
 
 frame.setDefaultCloseOperation(WindowConstants.EXI
T_ON_CLOSE); 
 } 
 
 public class Evento implements ActionListener { 
 
 @Override 
 public void actionPerformed(ActionEvent e) { 
 JOptionPane.showMessageDialog(null, "O 
texto é: " + texto1.getText()); 
 
 } 
 
 
 } 
 
} 
7 
 
 
1.3. Campos de seleção 
Eventos em campos de seleção também podem ser importantes. Um exemplo 
bastante comum é quando selecionamos um Estado em um campo de seleção 
de Estados e são mostradas apenas cidades que pertençam a esse Estado no 
campo de seleção de cidades. O quadro a seguir mostra o código para criar 
uma interface com esses dois campos. 
 
8 
 
package exemplos; 
 
public class Exemplo3 { 
 
 JComboBox estados; 
 JComboBox cidades; 
 
 List<String> listaEstados = Arrays.asList("São Paulo", "Rio de Janeiro", "Paraná"); 
 List<String> cidadesSaoPaulo = Arrays.asList("São Paulo", "Campinas", "Guarulhos"); 
 List<String> cidadesRioDeJaneiro = Arrays.asList("Rio de Janeiro", "Niteroi", "Angra 
dos Reis"); 
 List<String> cidadesParana = Arrays.asList("Curitiba", "Londrina", "Maringa"); 
 
 public static void main(String args[]) { 
 Exemplo3 exemplo = new Exemplo3(); 
 exemplo.criaTela(); 
 } 
 
 public void criaTela() { 
 JFrame frame = new JFrame("Teste Evento do Botão"); 
 
 GridLayout grid = new GridLayout(1, 2); 
 frame.setLayout(grid); 
 
 estados = new JComboBox(); 
 estados.addItemListener(new Evento()); 
 frame.add(estados); 
 
 cidades = new JComboBox(); 
 frame.add(cidades); 
 
 for (String estado : listaEstados) { 
 estados.addItem(estado); 
 } 
 
 frame.setSize(300, 100); 
 frame.setVisible(true); 
 frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
 } 
 
 class Evento implements ItemListener { 
 public void itemStateChanged(ItemEvent event) { 
 cidades.removeAllItems(); 
 if (event.getItem().equals("São Paulo")) { 
 for (String cidade : cidadesSaoPaulo) { 
 cidades.addItem(cidade); 
 } 
 } else if (event.getItem().equals("Rio de Janeiro")) { 
 for (String cidade : cidadesRioDeJaneiro) { 
 cidades.addItem(cidade); 
 } 
 } else if (event.getItem().equals("Paraná")) { 
 for (String cidade : cidadesParana) { 
 cidades.addItem(cidade); 
 } 
 } 
 
 } 
 } 
 
} 
9 
A figura a seguir mostra essa interface sendo executada. 
 
 
1.4. Leituraobrigatória 
Outros comandos e outros componentes podem ter eventos a ser tratados. 
Para conhecer esses componentes e as outras muitas opções de eventos dis-
poníveis na linguagem Java, confira estas referências: 
Java: como programar, 8ª edição, capítulo 14, da página 434 até a 460 
 
1.5. Leitura opcional 
Java: como programar, 8ª edição, capítulo 25 
Documentação da API Swing, disponível em: 
<https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextField.html> 
 
 
 
 
 
https://docs.oracle.com/javase/8/docs/api/javax/swing/JTextField.html
 
10 
2. Gerenciadores de layout 
Você deve ter notado nos códigos mostrados anteriormente que estamos 
usando a classe GridLayout. Essa classe é chamada de Gerenciador de Layout, 
que define como os componentes da tela serão organizados na interface. Po-
rém, existem muitos outros gerenciadores de layout disponíveis no pacote 
Swing. 
A linguagem Java oferece uma infinidade de gerenciadores, mas vamos traba-
lhar com os três mais usados. Talvez o mais simples dos gerenciadores seja o 
FlowLayout. Ele irá adicionar os componentes lado a lado, da esquerda para a 
direita, por padrão. Quando não houver mais espaço na linha, o componente 
será desenhado na linha de baixo. Veja o exemplo a seguir, que ilustra seu 
funcionamento. 
 
O exemplo ilustra a configuração do gerenciador de layout da janela e, poste-
riormente, a adição dos componentes na janela. 
 
package exemplos; 
 
import java.awt.FlowLayout; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JTextField; 
 
public class Exemplo4 { 
 
 public static void main(String[] args) { 
 
 JFrame frame = new JFrame("Cadastro de Alu-
no"); 
 frame.setLayout(new FlowLayout()); 
 
 frame.add(new JLabel("Nome:")); 
 frame.add(new JTextField(15)); 
 
 frame.setSize(300, 200); 
 
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS
E); 
 frame.setVisible(true); 
 
 } 
 
} 
11 
 
Uma alternativa ao FlowLayout é o GridLayout. Esse gerenciador divide a área 
útil da janela em linhas e colunas, formando uma matriz. Para isso, o progra-
mador determina a quantidade de colunas e, à medida que novos componen-
tes são adicionados, o gerenciador os distribui da esquerda para a direita, 
criando novas linhas quando necessário. 
 
Veja o exemplo abaixo para um jogo da memória, em que cada botão seria 
uma alusão a uma carta, cabendo ao jogador identificar os pares. Sendo as-
sim, a melhor disposição dos botões seria algo matricial: linha e coluna. 
package exemplos; 
 
import java.awt.GridLayout; 
 
import javax.swing.JButton; 
import javax.swing.JFrame; 
 
public class Exemplo5 { 
 
 public static void main(String[] args) { 
 
 JFrame janela = new JFrame("Jogo da Memó-
ria"); 
 janela.setLayout(new GridLayout(0, 4)); 
 for (int i = 0; i < 20; i++) { 
 janela.add(new JButton("" + i)); 
 } 
 janela.setSize(300, 200); 
 jane-
la.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 janela.setVisible(true); 
 
 } 
 
} 
 
12 
 
 
package exemplos; 
 
import java.awt.BorderLayout; 
 
import javax.swing.JButton; 
import javax.swing.JFrame; 
 
public class Exemplo6 { 
 
 public static void main(String[] args) { 
 
 JFrame frame = new JFrame("Border Layout"); 
 
 frame.setLayout(new BorderLayout()); 
 frame.add(new JButton("Norte"), BorderLay-
out.NORTH); 
 frame.add(new JButton("Sul"), BorderLay-
out.SOUTH); 
 frame.add(new JButton("Leste"), BorderLay-
out.EAST); 
 frame.add(new JButton("Oeste"), BorderLay-
out.WEST); 
 frame.add(new JButton("Centro"), BorderLay-
out.CENTER); 
 
 } 
 
} 
13 
 
 
2.1. Leitura obrigatória 
Outros comandos e outros componentes podem ter eventos a ser tratados. 
Para conhecer esses componentes e as outras muitas opções de eventos dis-
poníveis na linguagem Java, confira estas referências: 
Java: como programar, 8ª edição, capítulo 14, da página 460 até a 480 
 
2.2. Leitura opcional 
Uma leitura interessante para quem quer se aprofundar mais em gerenciado-
res de layout é a documentação oficial desses componentes. Essa documenta-
ção pode ser acessada em: 
<http://docs.oracle.com/javase/8/docs/api/javax/swing/package-
summary.html> 
 
http://docs.oracle.com/javase/8/docs/api/javax/swing/package-summary.html
http://docs.oracle.com/javase/8/docs/api/javax/swing/package-summary.html
 
14 
3. Exercícios 
1) Implemente a funcionalidade do programa do jogo de paciência exibido 
como exemplo do GridLayout. 
2) Implemente a tela de um cadastro de filmes. Os dados que devem ser 
cadastrados são o nome do filme, o nome do diretor e o ano de lançamen-
to. 
3) Além disso, faça os seguintes exercícios do livro Java: como programar, do 
capítulo: 14.12 e 14.15 
 
 
 
 
 
 
 
 
 
 
 
 
 
15 
4. Referências Bibliográficas 
API Java 8. Documentação online da plataforma SE Java 8. 
<http://docs.oracle.com/javase/8/docs/api/>. Último acesso em: 21/06/13. 
ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi de. 
Fundamentos de programação de computadores. 2ª ed. São Paulo: Pearson 
Prentice Hall, 2007. 
CORNELL, Gary; HORSTMANN, Cay S. Core Java: fundamentos. 8ª ed. São Pau-
lo: Pearson Education, 2009. 
DEITEL, Paul; DEITEL, Harvey. Java: como programar. 8ª ed. São Paulo: Pearson 
Prentice Hall Brasil, 2010. 
PUGA, Sandra; RISSETTI, Gerson. Lógica de programação e estruturas de da-
dos com aplicações em Java. São Paulo: Pearson Prentice Hall, 2003. 
SIERRA, Kathy; BATES, Bert. Use a cabeça – JAVA. 2ª ed. Rio de Janeiro: Alta Bo-
oks, 2007.

Continue navegando