Baixe o app para aproveitar ainda mais
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.
Compartilhar