• Nenhum resultado encontrado

Criação de Eventos para os Botões

No documento LINGUAGEM DE PROGRAMAÇÃO II VOLUME 01 (páginas 106-126)

3.4 Principais Componentes Gráficos

3.4.5 Criação de Eventos para os Botões

Agora que a sua interface gráfica está completa, é hora de incluir o código que regerá a sua aplicação. Ao criar uma interface gráfica o controle de execução do seu programa não está mais com você, como quando você implementava aplicativos do tipo console. Agora o usuário é que digita as informações na ordem que ele desejar e também clica nos botões na ordem que bem entender.

Agora a sua aplicação será baseada em eventos, e executará de acordo com a vontade do usuário.

Você precisará escrever osseus códigos dependendo da ação que o usuário executar. Então, neste exemplo, os seus dois trechos de códigos estão associados aos cliques dos botões Calcular Ano e Calcular Sexo.

O primeiro trecho de código será a realização do cálculo do ano de nascimento da pessoa que é só uma suposição (o erro máximo é de 1

ano), pois não tem como saber se a pessoa já fez ou não aniversário este ano.

Para associar um código ao botão ser pressionado, você deve clicar com o botão direito no botão Calcular Ano e selecionar Eventos ActionactionPerformed (vide figura 3.20.

Figura 3.20: Seleção do evento actionPerformed

Fonte: Captura de tela do Netbeans

Você perceberá você sairá do editor gráfico e visualizará o código do seu FormularioPrincipal e o cursor estará posicionado na linha que você deverá inserir o código quando o usuário apertar no botão

Calcular Ano (no caso deste exemplo, o cursor está na linha 228 do código da figura 3.21).

Figura 3.21: Código do Formulário Principal referente ao evento do botão Calcular Ano

Fonte: Captura de tela do Netbeans

Como o próprio nome já diz, tudo que é digitado num campo de texto é TEXTO, ou sejaString. Portanto, a idade da pessoa também é um texto, e você precisará converter para poder calcular o ano de nascimento da pessoa. Você já viu que o texto ficar armazenado na propriedade text, e como no Java existem métodos get e set para acessar os atributos, então para saber o texto que está num campo de texto é necessário utilizar o método getText(), e para alterar o texto, utiliza-se o método setText(novoTexto). Veja o código completo da execução do botão Calcular Ano na figura 3.22.

Figura 3.22: Código completo do botão Calcular Ano

Fonte: Conteudista

Para testar se o seu código está funcionando, execute a aplicação apertando no botão Executar projeto principal (que é um triângulo verde, como os botões de Play de um tocador de DVD) ou aperte a tecla F6. Como você não criou uma classe principal para este projeto, aparecerá uma caixa de diálogo como a que pode ser visualizada na figura 3.23, onde você deve selecionar a única classe disponível que é gui.FormularioPrincipal e apertar o botão OK.

Figura 3.23: Caixa de diálogo Executar projeto

Esta tela da figura 3.23 só é apresentada uma única vez, das próximas vezes que você executar a aplicação a classe gui.FormularioPrincipal será executada automaticamente. Se você criar uma outra classe principal no seu projeto e resolver alterar, basta clicar com o botão direito no nome do projeto na janela Projetos, selecionar a opção Propriedades, depois clicar na opção Executar e selecionar a classe principal que você deseja ficar sempre executando quando executar o seu projeto.

Na área principal do projeto, como pode ser visto na figura 3.24, você pode voltar para a área de edição gráfica do seu FormularioPrincipal, bastando para isto clicar no botão Projeto.

Figura 3.24: Opção Projeto do FormularioPrincipal

Fonte: Captura de tela do Netbeans

Agora você irá criar um evento actionPerformed para o botão Calcular Sexo e irá escrever o código que tenta descobrir se é homem ou mulher, conforme figura 3.25.

Figura 3.25: Código completo do botão Calcular Sexo

Fonte: Conteudista

Preste atenção neste código (figura 3.25) e tente entender a lógica utilizada. Só é realizada manipulação de String e para decidir se é do sexo Masculino ou Feminino, só é utilizada a última letra do primeiro nome.

Saiba Mais

Até o momento só foi utilizado o evento actionPerformed, se você quiser saber mais sobre eventos (aulas 20, 21 e 22) e sobre mais componentes gráficos disponíveis no Swing (aulas 6 a 14) dê uma olhada nos slides de aula disponíveis no seguinte link:

http://www.metropoledigital.ufrn.br/aulas_avancado/web/dis ciplinas/desktop/index.html

3.4.6 Caixa de Combinação (JComboBox), Botão de opção (JRadioButton), Lista (JList), Caixa de Seleção (JCheckBox) e Grupo de Botões (ButtonGroup)

Agora que você já conheceu os componentes Swing e aprendeu a utilizar o básico, você verá como fazer uma interface com recursos mais avançados como o Formulário Secundário das figuras 3.26 e 3.27.

Figura 3.27: Interface Formulário Secundário com o JComboBox aberto

Fonte: Captura de tela do Netbeans

Crie um novo Formulário JFrame neste projeto, dê a ele o nome de FormularioSecundario, e preencha de acordo com o projeto visual da figura 3.26.

Os tipos dos componentes utilizados são: Rótulo (JLabel): Palavra e Inserir; Caixa de combinação (JComboBox): ao lado do rótulo Palavra; Botão de opção (JRadioButton): Esquerda e Direita; Lista (JList): as listas da esquerda e da direita; Caixa de seleção (JCheckBox): Ordenar dos dois lados; Botão (JButton): Inserir, <<, <, >, >> e os dois Limpar.

Os nomes das variáveis utilizados foram: cbPalavra, rbEsq, rbDir, lstEsq, lstDir, cbEsqOrd, cbDirOrd, btInserir, btEsqTudo, btEsq, btDir, brDirTudo, btEsqLimp e btDirLimp, respectivamente.

Foi inserido também um componente não visual Grupo de botões e o nome da variável foi alterado para bgEsqDir. A seleção deste grupo deve ser feita através da janela Inspetor, já que é um componente que não aparece no projeto gráfico do formulário.

As propriedades alteradas destes componentes foram:

cbPalavra: editable para true, model para “Alto, Banana, Caixa, Dado, Escola, Festa, Gaiola, Hoje, Igreja, Jacaré” (sem as aspas) e selectedIndex para -1;

rbEsq: buttonGroup para bgEsqDir e selected para true; rbDir: buttonGroup para bgEsqDir;

lstEsq: model para um código personalizado com o seguinte código: “new javax.swing.DefaultListModel()”;

lstDir: model para um código personalizado com o seguinte código: “new javax.swing.DefaultListModel()”;.

Agora é necessário entender melhor o porquê das alterações feitas. Inicialmente, a caixa de combinação possui a propriedade model que possui os itens que devem aparecer quando o usuário clica para

possível clicar nas reticências (...) da propriedade model e você digita no editor as 10 palavras, uma em cada linha, sem a utilização de vírgulas. Ao indicar que esta caixa de combinação é editable, você quer permitir que o usuário possa também digitar as suas próprias palavras, e finalmente ao marcar que o índice selecionado (selectedIndex) é o -1, você está querendo que nenhuma das 10 palavras estejam selecionadas.

O selectedIndex é utilizado para marcar qual o objeto da lista está selecionado e funciona igual a um array, isto é, inicia do zero, então -1 significa que nenhum valor está selecionado. No código, você pode utilizar o método getSelectedIndex() e setSelectedIndex(novoValor) para acessar e alterar o índice selecionado.

Quando você insere botões de opção (JRadioButton), cada botão é independente do outro, isto quer dizer que quando você marca um o outro não é desmarcado automaticamente. Para que aconteça este relacionamento entre os botões de opção é necessário incluir o componente não visual Grupo de botões (ButtonGroup), e associar todos os botões de opção que fazem parte do mesmo grupo a este grupo de botões.

Se por acaso você tiver vários conjuntos de botões de opção, então você precisa criar um grupo de botões para cada um destes conjuntos.

A propriedade selected define se o botão está ou não selecionado. No exemplo, o botão de opção Esquerda está selecionado como padrão, por isso esta propriedade está ativada. Para acessar esta propriedade no código você deve utilizar o isSelected() [para valores booleanos utiliza-se o “is” no lugar de “get”] e para alterar o método setSelected(novoValor).

Finalmente, as listas (JList) da esquerda e da direita com um código personalidado. Este é um dos pontos mais complicados para o iniciante, pois é preciso que você saiba que o Java separa o código de interface gráfica (JList) dos dados (Model, neste caso, DefaultListModel). Portanto, sempre que você quiser consultar e alterar os dados é necessário acessar o Model da sua lista.

Por padrão, o Netbeans cria um Model que só exibe os itens criados estaticamente, sem a possibilidade de incluir ou remover algum item enquanto o programa está executando. Por isso, você deve clicar nas reticências (...) na propriedade model, selecionar a opção Código

personalizado e incluir o código: “new

Figura 3.28: Código do Model de um JList personalizado

Fonte: Captura de tela do Netbeans

Observe a necessidade de informar o nome completo da classe javax.swing.DefaultListModel, pois o Netbeans automaticamente não faz nenhum import para os componentes gráficos utilizados.

A caixa de combinações (JComboBox) também possui um model, e se você quiser que ele seja alterado dinamicamente, então você deve seguir o mesmo passo a passo para se alterar o model de um JList,

porém o model de um JComboBox é

3.4.7 Funcionalidade do Formulário Secundário

Agora que o formulário secundário está criado, é necessário incluir as funcionalidades de todos os botões. Primeiramente, veja na figura 3.29 o código que realiza a ordenação de uma lista recebida como parâmetro, este código foi inserido logo antes do main e será utilizado em todos os outros códigos de botões. Este código pega todos os dados da lista (model) e armazena em um vetor, ordena o vetor, limpa a lista e insere os valores que estão no vetor de volta para a lista.

Figura 3.29: Código do método ordenar

Fonte: Conteudista

O código do botão Inserir para o evento actionPerformed (figura 3.30) realiza o teste para ver se existe uma palavra para ser inserida na lista, depois verifica em qual das listas ela será inserida (esquerda ou direita), adiciona a palavra ao Model da lista escolhida, chama a função ordena se for necessária, apaga a palavra digitada da caixa de seleção e manda o foco de volta para a caixa de seleção para facilitar a digitação de novas palavras.

Figura 3.30: Código do botão Inserir

Fonte: Conteudista

Os botões << (vide figura 3.31) e >> (vide figura 3.32) tem códigos parecidos, a única coisa que muda é a direção de envio (esquerda para a direita ou direita para a esquerda). A lógica do código do botão << é a seguinte: recupera os models das duas listas, insere no model da lista da esquerda todos os valores existentes na lista da direita, limpa todos os elementos do model da lista da direita e, se necessário, ordena a lista da esquerda.

Figura 3.31: Código do botão <<

Figura 3.32: Código do botão >>

Fonte: Conteudista

Os códigos dos botões < (vide figura 3.33) e > (ver figura 3.34) são semelhantes, portanto será dado um detalhamento apenas do código do botão <. Como este código é mais complexo, veja bem os comentários existentes. A lógica deste código é a seguinte: recupera todos os índices dos itens selecionados da lista da direita (numa lista o usuário pode selecionar vários valores), insere os respectivos itens na lista da esquerda e remove os itens da lista da direita. Porém, para esta lógica funcionar, na hora de remover, é necessário ir removendo do último item para o primeiro, porque se você remover o primeiro, todos os índices mudarão, e você terminará excluindo itens que não estavam selecionados, ou ainda pior, acessando uma posição inexistente, gerando uma exceção.

Figura 3.33: Código do botão <

Fonte: Conteudista

Figura 3.34: Código do botão >

Fonte: Conteudista

Os códigos dos botões ordenar (figura 3.35) são similares e simples, faz-se um teste para saber se o botão ficou selecionado, e em caso verdadeiro, chama o método ordenar.

Figura 3.35: Código dos botões ordenar (esquerda e direita)

Fonte: Conteudista

Finalmente, na figura 3.36 você pode ver o código que limpa todos os elementos de da lista esquerda e direita. Bem simples e direto.

Figura 3.36: Código dos botões limpar (esquerda e direita)

Fonte: Conteudista

Como você pode observar, sempre que trabalhar você for trabalhar com listas utiliza-se bastante a propriedade model da lista para realizar a funcionalidade desejada.

Saiba Mais

Vocês pode obter mais detalhes sobre Swing nos seguintes sites: http://download.oracle.com/javase/tutorial/ui/index.html http://download.oracle.com/javase/tutorial/uiswing/index.ht ml

http://www.metropoledigital.ufrn.br/aulas_avancado/web/dis ciplinas/desktop/index.html http://netbeans.org/kb/docs/java/quickstart-gui_pt_BR.html http://netbeans.org/kb/docs/java/gui- functionality_pt_BR.html http://netbeans.org/kb/trails/matisse_pt_BR.html Atividades de aprendizagem:

1. Crie uma aplicação no Netbeans que realize conversões entre temperaturas (graus celsiuse fahrenheit), ângulo (radiano e graus) e velocidade (mph e km/h). Crie um único formulário, com painéis internos separando em três grupos distintos.

2. Pesquise na Internet e insira no código do exercício anterior, a utilização do ENTER, ao invés de realmente precisar clicar no botão de conversão.

RESUMO

Nesta aula você aprendeu a criar aplicações Java com interface gráfica utilizando Swing. Você viu como utilizar o Netbeans para criar visualmente (clicando e arrastando) os componentes visuais que facilita bastante a construção de interface gráfica. Também aprendeu quais são os principais componentes do Swing e principais propriedades de cada um destes componentes.

REFERÊNCIAS

[1] DEITEL, Harvey M.; DEITEL, Paul J.. Java, como programar. 8. ed. Prentice Hall Brasil, 2010.

[2] MECENAS, I. J.Java 6 - Fundamentos, Swing, Bluej E Jdbc. 3. ed. Starlin Alta Consult, 2008.

[3] HORSTMANN, Cay S.; CORNELL, Gary. Core Java, V.1 - Fundamentos. 8. ed.Prentice Hall Brasil, 2009.

[4] ______. The Java Tutorials. Disponível em http://download.oracle.com/javase/tutorial/. Atualizado em 17/03/2011. Acessado em 16/04/2011.

No documento LINGUAGEM DE PROGRAMAÇÃO II VOLUME 01 (páginas 106-126)

Documentos relacionados