Li n g u age m d e Pr o g ramação
Linguagem de Programação
GUI (Graphical User Interface)
Luciene Cristina Alves Rinaldi
Centro Universitário FIEO
Li n g u age m d e Pr o g ramação
Objetivo
Esta aula tem como objetivo apresentar os princípios de Interfaces gráficas com o
usuário, entender os pacotes que contêm componentes GUI, interfaces e classes de tratamento de evento.
2
Li n g u age m d e Pr o g ramação
Introdução
Graphical User Interface (GUI)
• Interface amigável ao usuário.
• Interação mais rápida e produtiva
3
Li n g u age m d e Pr o g ramação
Aparência das GUIs
Exemplo de Interface:
• Janela de navegador da Web do Internet Explorer com alguns de seus componentes GUI rotulados:
4
Li n g u age m d e Pr o g ramação
Definição
As GUIs são construídas a partir de componentes GUI.
Um componente GUI é um objeto em que o usuário interage via mouse, teclado ou
outros dispositivos de entrada.
5
Li n g u age m d e Pr o g ramação
AWT x Swing
São dois os componentes GUI do Java:
AWT e o Swing.
Ex. botões, barras de títulos das janelas, etc.
Antes do Swing ser introduzido no J2SE 1.2, as GUI eram construídos com componentes Abstract
Window Toolkit (AWT) do pacote java.awt;
O problema dos aplicativos AWT é que eles estão associados a plataforma local (para o qual foram desenvolvidos, por exemplo Windows, Linux).
O resultado disso é que são componentes pesados,
pois são desenvolvidos para diferentes estilos.
6Li n g u age m d e Pr o g ramação
O AWT serviu de “base” para a construção do Swing (que ainda utiliza alguns de seus recursos).
No Swing sempre haverá alguma classe AWT, pois nem todos componentes e eventos foram re-
implementados.
As classes Swing utilizam o pacote javax.swing.
Uma forma de diferenciar classes Swing da AWT é pelo prefixo dos componentes (todas as classes Swing iniciam com a letra “J”).
O Swing permite o programador especificar a aparência e o comportamento para cada
plataforma ou uma forma uniforme que sirva para
todas as plataformas.
7AWT x Swing (cont.)
Li n g u age m d e Pr o g ramação
Componentes Leves x Pesados
Os componentes Swing são considerados como de peso leve, pois são completamente escritos em Java.
Os componentes AWT (muitos dos quais são equivalentes aos Swing) são vinculados a plataforma local, por isso, são considerados componentes de peso pesado.
Os componentes AWT contam com o sistema de janela da plataforma local para determinar sua funcionalidade, aparência e comportamento.
8
Li n g u age m d e Pr o g ramação
A hierarquia de herança das classes define os atributos e comportamentos que são comuns para a maioria dos componentes.
Cada classe é exibida com o nome de seu pacote e nome da classe.
9
SubClasse dos componentes Swing
Li n g u age m d e Pr o g ramação Uma classe que herda a classe Component é um componente.
Por exemplo, a classe Container herda a classe
Component e a classe Component herda Object.
Portanto, um Container é um Component de Object, e Component é um Object.
10
SubClasse dos componentes Swing
Li n g u age m d e Pr o g ramação
A classe Component define os métodos que podem ser aplicados a um objeto de qualquer subclasse de Component (Ex. métodos paint e repaint).
As operações comuns para a maioria dos
componentes GUI (tanto Swing como AWT) estão localizadas na classe Component.
A grande parte da funcionalidade herdada por cada subclasse de Component é definida originalmente
na classe Component.
11SubClasse dos componentes Swing
Li n g u age m d e Pr o g ramação
12
A classe Container é uma coleção de componentes relacionados.
Em aplicativos com JFrame e Applets, anexamos os componentes ao painel (um Container).
Essa classe define o conjunto de métodos que podem ser aplicados a um objeto de qualquer subclasse Container.
Exemplo de métodos da classe Container: add e setLayout (gerenciador de layout).
SubClasse dos componentes Swing
Li n g u age m d e Pr o g ramação
São utilizados para organizar os
componentes GUI em um Container com a finalidade de apresentação.
13
Gerenciamento de Layout
Li n g u age m d e Pr o g ramação
FlowLayout
14
Os componentes são colocados em um Container da esquerda para a direita na ordem em que são adicionados
(alinhamento: esquerda, centralizado (padrão) e a direita)
Li n g u age m d e Pr o g ramação
15
FlowLayout (cont.)
Li n g u age m d e Pr o g ramação
16
FlowLayout (cont.)
Li n g u age m d e Pr o g ramação
BorderLayout
17
Os componentes (layout padrão para o painel de conteúdo)
são organizados em cinco regiões: Norte, Sul, Leste Oeste e
Centro.
Li n g u age m d e Pr o g ramação
18
BorderLayout (cont.)
Li n g u age m d e Pr o g ramação
19
BorderLayout (cont.)
Li n g u age m d e Pr o g ramação
GridLayout
20
Os componentes são colocados nas linhas e colunas (o
Container é dividido em uma grade). Eles são adicionados a uma grade iniciando na parte superior esquerda e
prosseguindo da esquerda para a direita até o fim da linha.
Li n g u age m d e Pr o g ramação
21
GridLayout (cont.)
Li n g u age m d e Pr o g ramação
22
GridLayout (cont.)
Li n g u age m d e Pr o g ramação
JFrame
23
Janelas em uma interface gráfica são áreas que podem ser exibidas em qualquer área da tela.
A classe Jframe é responsável pela exibição de janelas para o
usuário.
Li n g u age m d e Pr o g ramação
24
JFrame (cont.)
Li n g u age m d e Pr o g ramação
Para utilizar as funções padrão foi adicionado o método setDefaultCloseOperation().
Ele pode receber como parâmetro as constantes da tabela abaixo.
A janela é exibida através do método show().
25
JFrame (cont.)
Li n g u age m d e Pr o g ramação
JLabel
26
Fornecem instruções de texto ou informações sobre uma GUI.
Ele exibe uma única linha de texto de leitura.
Observação: As imagens.gif devem ser colocadas no diretório:
\build\classes\lista11
Li n g u age m d e Pr o g ramação
27
JLabel (cont.)
Li n g u age m d e Pr o g ramação
JButton
28
É um componente em que o usuário clica para acionar uma ação específica.
Um programa Java pode utilizar vários tipos de botões,
incluindo botões de: comando, caixas de seleção, alternação e opção.
Observação: As imagens.gif devem ser colocadas no diretório:
\build\classes\lista11
Li n g u age m d e Pr o g ramação
29
JButton (cont.)
Li n g u age m d e Pr o g ramação
JTextField e JPasswordField
30
São áreas de uma única linha em que o texto pode ser inserido via teclado pelo usuário ou o texto pode ser exibido.
Um JPasswordField mostra o caractere digitado oculto, pois assume que eles representam uma senha que deve
permanecer desconhecida.
Li n g u age m d e Pr o g ramação
31
JTextField e JPasswordField (cont.)
Li n g u age m d e Pr o g ramação
32
JTextField e JPasswordField (cont.)
Li n g u age m d e Pr o g ramação
JTextArea
33
É destinado a exibir uma área para manipulação de múltiplas linhas de texto.
Para realizar a operação, a chamada ao método getText() da
primeira JTextArea copia todo o texto da primeira para a
segunda, enquanto o getSelectedText() copia apenas o
texto selecionado.
Li n g u age m d e Pr o g ramação
34
JTextArea (cont.)
Li n g u age m d e Pr o g ramação
35
JTextArea (cont.)
Li n g u age m d e Pr o g ramação
A tabela abaixo exibe algumas métodos úteis e sua função na classe JTextArea
36
JTextArea (cont.)
Li n g u age m d e Pr o g ramação
JPanel
37
Para interfaces mais complexas, cada componente deverá ser colocado em um local exato para que a aplicação fique com uma GUI interessante para o usuário.
Para essa localização exata, torna-se necessária a utilização de
“áreas” ou “grupos” de componentes, chamados de painéis (controlados pela classe JPanel).
Assim, um painel é um
agrupamento de componentes,
sendo que estes componentes
podem ser até mesmo outros
painéis.
Li n g u age m d e Pr o g ramação
38
JPanel (cont.)
Li n g u age m d e Pr o g ramação
JComboBox
Observação: As imagens.gif devem ser colocadas no diretório: 39
\build\classes\lista11
É uma caixa de combinação (ou combo box, às vezes também é chamado de lista dropdown) que fornece uma lista de
itens entre os quais o usuário pode escolher.
Li n g u age m d e Pr o g ramação
40
Li n g u age m d e Pr o g ramação
Barra de Menus (JMenuBar)
41
A classe JMenuBar tem por objetivo gerenciar uma barra de menus. Uma barra de menus é utilizada em aplicações, estando localizada abaixo do título da janela.
No Swing ela só pode ser associada a classes que possuam o método setMenuBar. As classes que mais utilizam menus são JFrame e JApplet.
JMenuItem
JMenu JMenuBar
Li n g u age m d e Pr o g ramação
42
Barra de Menus (JMenuBar) (cont.)
Li n g u age m d e Pr o g ramação
43
Barra de Menus (JMenuBar) (cont.)
Li n g u age m d e Pr o g ramação
JRadioButtonMenuItem
44
Um JRadioButtonMenuItem é a criação de um grupo de botões.
Esse grupo tem por função dizer quais são os itens que estão inclusos no radio para restringir que exista apenas um item selecionado do mesmo grupo.
A criação é feita através do objeto grupo, instanciado a partir
da classe ButtonGroup.
Li n g u age m d e Pr o g ramação
45
JRadioButtonMenuItem (cont.)
Li n g u age m d e Pr o g ramação
JCheckBoxMenuItem
46
Podemos utilizar itens check na construção de menus.
O programa abaixo funciona da mesma forma que o anterior,
tendo a única diferença a substituição dos itens JMenuItem
por JCheckBoxMenuItem.
Li n g u age m d e Pr o g ramação
47
JCheckBoxMenuItem (cont.)
Li n g u age m d e Pr o g ramação
JPopupMenu
48
É responsável pela exibição de pequenos menus (menus de
contexto) os quais são muito utilizados nas aplicações
atuais. No Swing são exibidos ao receberem um clique
disparado com o botão direito do mouse.
Li n g u age m d e Pr o g ramação
49
JPopupMenu (cont.)
Li n g u age m d e Pr o g ramação
50
JPopupMenu (cont.)
Li n g u age m d e Pr o g ramação
JOptionPane
51
Para construir caixas de diálogo, é utilizado a classe
JOptionPane (considerados modais). Para os não modais, deve ser utilizado a classe JDialog.
A classe JOPtionPane possui métodos para gerar os tipos de
diálogos mais comumente utilizados.
Li n g u age m d e Pr o g ramação
Tipos de diálogos de mensagem
Qualquer diálogo criado com JOptionPane possui um conjunto de ícones padrões que
podem ser utilizados a fim de preservar o Look And Feel de cada plataforma
Ícones customizados também podem ser adicionados quando necessário.
52
JOptionPane (cont.)
Li n g u age m d e Pr o g ramação
No primeiro exemplo é importante destacar os parâmetros para chamada do método estático showMessageDialog()
53
JOptionPane (cont.)
Li n g u age m d e Pr o g ramação
54
JOptionPane (cont.)
Para exibir uma caixa de diálogo com opções de confirmação
podemos utilizar o método showConfirmDialog()
Li n g u age m d e Pr o g ramação
55
JOptionPane (cont.)
Li n g u age m d e Pr o g ramação
56
JOptionPane (cont.)
Para exibir uma caixa de diálogo JOPtionPane personalizada esta disponível o método showOptionDialog().
Consulte a API do SDK para conhecer mais variações deste
método.
Li n g u age m d e Pr o g ramação
57
JOptionPane (cont.)
Li n g u age m d e Pr o g ramação
58
JOptionPane (cont.)
A chamada ao método showOptionDialog() possui sintaxe diferente das anteriores.
Pode ser realizada de 2 formas:
(1) É definido quais serão os botões a exibir através do parâmetro JOptionPane YES_NO_OPTION, utilizando um dos disponíveis na tabela abaixo;
(2) É como o programa utiliza os 2 últimos parâmetros deste
método informando no primeiro um vetor com o nome dos
botões e no segundo o nome do botão padrão.
Li n g u age m d e Pr o g ramação
59
Exemplo (JOptionPane)
prompt para o usuário
Caixa de diálogo exibida pela linha 9 Quando o usuário clica em
OK o showInputDialog retorna para o programa com o 5 digitado pelo usuário como String. O programa deve converter o String em int
barra de títulos
Quando o usuário clica em OK, o diálogo de mensagem é dispensado (removido da tela)
campo de texto em que o usuário digita o valor
Li n g u age m d e Pr o g ramação
60
Exemplo (JOptionPane) (cont.)
Li n g u age m d e Pr o g ramação
Botões:
– OK:
• envia a String para o programa;
• Fecha (oculta) a caixa de diálogo;
– Cancel:
• showInputDialog retorna null;
• Se o usuário digitar um valor não inteiro, ocorrerá um erro de lógica em tempo de execução:
– Tratamento de Exceções;
61Exemplo (JOptionPane) (cont.)
Li n g u age m d e Pr o g ramação
1 argumento (null):
– Onde posicionar a caixa de diálogo;
– Null indica centro da tela;
2 argumento (“A soma dos dois números é ” + soma):
– Mensagem a exibir;
3 argumento (“Soma de dois números inteiros”):
– Título da janela;
4 argumento (JOptionPnane.PLAIN_MESSAGE):
– Tipo de diálogo de mensagem a ser exibido;
– Exibe um ícone à esquerda da mensagem; 62
Exemplo (JOptionPane) (cont.)
Li n g u age m d e Pr o g ramação
63
JTable
É utilizada para exibir tabelas de dados e caso necessário
permitir que o usuário manipule os dados
Li n g u age m d e Pr o g ramação
JTable (cont.)
64
Li n g u age m d e Pr o g ramação
65
JTable (cont.)
O programa declara uma matriz de Object[][] e inicializa com o conteúdo da JTable. É criado um vetor Object[][]
contendo os nomes das colunas.
Após a tabela montada, o programa define o JScrollPane, adiciona a tabela a ele e adiciona o JScrollPane ao layout.
O JScrollPane irá exibir o nome das colunas no cabeçalho e controlará os scrolls.
Para modificar a largura de uma coluna é necessário utilizar o seguinte código:
O método getColum() recebe como parâmetro um inteiro.
Este inteiro é o número da coluna ou a posição no vetor
(iniciando com zero) que possui o nome das colunas.
Li n g u age m d e Pr o g ramação
66
JTable (cont.)
Para utilizar o auto-redimensionamento, a classe JTable através do método setAutoResizeMode() permite que as colunas sejam redimensionadas automaticamente quando são manipuladas conforme exemplo abaixo:
O método setAutoResize() recebe como parâmetro uma
constante que é a propriedade que dita a forma pela qual
vai ser feito o redimensionamento. A tabela abaixo tem as
constantes disponíveis e suas funções.
Li n g u age m d e Pr o g ramação
JScrollPane
67
Fornece uma visão com scroll de um componente GUI.
É utilizado quando o tamanho de uma tela é menor que a quantidade de informações que se deseja mostrar.
É responsável pela exibição de barras de rolagem.
Li n g u age m d e Pr o g ramação
68
JScrollPane (cont.)
Li n g u age m d e Pr o g ramação
69
JScrollPane (cont.)
O JScrollPane permite que sejam criadas regras para exibição ou não das barras de rolagem.
Estas regras são definidas através de métodos que recebem
como parâmetros (constantes) indicados nas tabelas abaixo.
Li n g u age m d e Pr o g ramação
JFileChooser
70
Exibe uma GUI para navegar pelo sistema de arquivos para escolher arquivos ou diretórios (conhecida como janela para seleção de arquivos – Ex. Abrir, Salvar, ...).
O Look And Feel irá determinar o que será exibido de opções
nestas caixas de diálogo.
Li n g u age m d e Pr o g ramação
71
JFileChooser (cont.)
Li n g u age m d e Pr o g ramação
Para permitir que o usuário selecione apenas diretórios e não arquivos pode-se utilizar o método:
72
JFileChooser (cont.)
Li n g u age m d e Pr o g ramação
Look And Feel
73
Um programa que utiliza componentes GUI assume a
aparência e comportamento da plataforma (por exemplo, Windows, Macintosh ou Unix) em que ele é executado.
Isso pode ser desejável, uma vez que permite aos usuários em cada plataforma utilizar os componentes com o qual estão familiarizados.
Isso também introduz questões interessantes de portabilidade.
Os componentes GUI do Swing eliminam muitas dessas questões fornecendo funcionalidade uniforme de uma plataforma para outra definindo a aparência e
comportamento como Metal.
Mas, tem a flexibilidade para personalizar o estilo Windows
ou o Motif do Unix.
Li n g u age m d e Pr o g ramação
74
Look And Feel (cont.)
Li n g u age m d e Pr o g ramação
75
Look And Feel (cont.)
Li n g u age m d e Pr o g ramação
76
Look And Feel (cont.)
Li n g u age m d e Pr o g ramação
77
Look And Feel (cont.)
Li n g u age m d e Pr o g ramação
Tratamento de Eventos
Listeners
Quando ocorre uma interação com o usuário, um evento é automaticamente enviado para o programa.
Para processar um evento, deve-se realizar 2 tarefas:
(1) registrar um ouvinte (Listeners) e; (2) implementar um tratador (Handler).
Um objeto ouvinte de eventos “ouve” tipos específicos de eventos gerados no mesmo objeto ou por outros objetos.
Um tratador é um método que é automaticamente
chamado em resposta a um tipo de evento em particular.
Cada interface ouvinte especifica um ou mais métodos de tratamento de eventos que devem ser definidos na
classe que implementa a interface ouvinte de eventos (pacote javax.swing.Event).
78
Li n g u age m d e Pr o g ramação
79
Listeners (cont.)
Lembre-se que as interfaces definem métodos abstract.
A classe que implementa uma interface deve definir
todos os métodos dessa classe, caso contrário, a classe é abstract e não pode ser utilizada para criar objetos.
Quando ocorre um evento, o componente que o usuário interagiu notifica seus ouvintes registrando a chamada ao método de tratamento do evento apropriado.
Exemplo: quando o usuário pressiona Enter em um JTextField, o método actionPerformed do ouvinte registrado é chamado.
Exemplo de Eventos: ActionListener, MouseListener, WindowsListener, KeyListener, MouseMotionListener.
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
Implementando uma Interface
Consiste na implementação de uma interface que tenham componentes que a “habilitem” tratar
determinados tipos de eventos.
Isso pode ser feito pela própria classe onde os eventos são originados ou por outra classe.
Os objetos criados terão a capacidade de responder a eventos.
80
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
81
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
82
Tratamento de Eventos (cont.)
Delegando o tratamento a outro objeto
O programa possui uma classe com a GUI e uma outra
classe apenas para tratar os eventos desta.
Li n g u age m d e Pr o g ramação
83
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
84
Tratamento de Eventos (cont.)
Utilizando classes anônimas internas
Este método é semelhante a delegar a outro objeto com a diferença de não possuir uma classe nomeada para
tratar o evento.
Ou seja, o objeto é criado com uma instrução “new” no próprio método addActionListener.
É a forma mais prática de implementar o tratamento de eventos, pois não existe a necessidade de 2 classes
nomeadas em arquivos separados.
Li n g u age m d e Pr o g ramação
85
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
86
Li n g u age m d e Pr o g ramação
87
Tratamento de Eventos (cont.)
Eventos de Mouse
Podem ser capturados por qualquer componente GUI derivado de java.awt.Component.
Cada um dos tratamentos aceita um objeto MouseEvent como seus argumentos.
Um objeto MouseEvent contém as informações sobre o
evento de mouse que ocorreu, incluindo as coordenadas
x e y da localização onde o evento ocorreu.
Li n g u age m d e Pr o g ramação
88
Os métodos de interfaces MouseListener e MouseMotionListener
são resumidos em:
Li n g u age m d e Pr o g ramação
89
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
90
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
91
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
Tratando Eventos do Teclado
92
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
Tratando Evento do Teclado (cont.)
Eventos de teclas são gerados quando as teclas no teclado são pressionadas e liberadas.
Uma classe que implementa KeyListener deve fornecer definições para os métodos KeyPressed, KeyReleased e
KeyTyped, cada uma das quais recebe um KeyEvent como seu argumento.
A classe keyEvent é uma subclasse de InputEvent.
O método KeyPressed é chamado em resposta ao pressionamento de qualquer tecla.
O método KeyTyped é chamado em resposta ao
pressionamento de qualquer tecla que não é uma tecla de ação (por exemplo, seta, home, end, page up, page down, uma tecla de função, num lock, print screen, scrool lock, caps lock e
pause.
O método KeyRelease é chamado quando a tecla é liberada
depois de qualquer evento KeyPressed ou KeyTyped.
93Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
94
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
95
Tratamento de Eventos (cont.)
Li n g u age m d e Pr o g ramação
Primeiro Formulário
Vamos criar um formulário simples utilizando o Swing:
Para começar nosso formulário iremos criar uma classe EX31.java:
96
Li n g u age m d e Pr o g ramação
Iremos usar dois componentes: uma etiqueta/label (JLabel) e um campo de texto (JTextField):
97
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Na classe EX31, crie um método MontaFormulario para inicializar os componentes:
98
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Todo componente Swing deve ser adicionado a um contêiner (Container) que administrará o agrupamento e exibição dos mesmos.
Usaremos o container mais comum, um Jpanel (algo como um painel de componentes). Através de seu método add conseguimos
adicionar nossos componentes:
99
Não esqueça de importar a biblioteca JPanel no pacote java.swing e nem de declarar o componentes JPanel.
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Por último, para exibirmos nosso formulário simples,
precisamos colocar nosso Jpanel em uma janela. Usaremos a classe JFrame, que representa uma janela simples:
100
Não esqueça de importar a biblioteca JFrame no pacote java.swing e nem de declarar o componentes JFrame.
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
O método pack() de JFrame, chamado acima, serve para redimensionar nosso frame para um tamanho adequado baseado nos componentes que ele tem.
O setVisible recebe um boolean indicando se queremos que a janela seja visível ou não.
101
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Vamos apenas adicionar um último comando que indica ao nosso frame que a aplicação deve ser terminada quando o usuário fechar a janela:
102
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Vamos chamar o método MontaFormulario() na classe main para testar o programa.
Criar um objeto da classe EX31 e chamar o método MontaFormulario():
103
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
104
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Ao rodar este programa, teremos a seguinte tela para digitação do nome:
Precisamos agora adicionar os eventos
105
Primeiro Formulário (cont.)
Li n g u age m d e Pr o g ramação
Adicionando Eventos
O Swing possui uma forma muito elegante de
trabalhar com eventos (através de interfaces).
O usuário pode disparar eventos ao digitar, ao clicar, ao passar o mouse e muitas outras situações.
No nosso formulário, usaremos um botão
(componente) que, quando clicado pelo usuário (evento), disparará um método
(tratador/handler).
Neste método, vamos recuperar o texto digitado pelo usuário e efetuar alguma ação.
106
Li n g u age m d e Pr o g ramação
O componente Swing que representa um botão é o Jbutton.
Precisamo criar um botao e colocá-lo no nosso container (o JPanel):
107
Adicionando Eventos (cont.)
Li n g u age m d e Pr o g ramação
Como disparar um método quando o botão for clicado?
O Swing nos traz o conceito de Listeners (ouvintes), que são interfaces que
implementamos com métodos para serem disparados por eventos.
No nosso caso, para fazer um método disparar ao clique do botão, usamos a interface
ActionListener. Essa interface nos dá um método actionPerformed:
108
Adicionando Eventos (cont.)
Li n g u age m d e Pr o g ramação
Vamos fazer então nossa própria classe formulário implementar essa interface e esse método.
Queremos, quando o botão for clicado, pegar o
texto digitado pelo usuário e exibir na tela (vamos usar o JOptionPane para isso).
Nosso método actionPerformed fica desta forma:
109
Adicionando Eventos (cont.)
Li n g u age m d e Pr o g ramação
O último detalhe que falta é indicar que essa ação (esse ActionListener) deve ser disparado quando o botão for clicado.
Fazemos isso através do método addActionListener chamado no botão.
Ele recebe como argumento um objeto que
implementa ActionListener (no nosso caso, o próprio objeto EX31, o this):
110
Adicionando Eventos (cont.)
Li n g u age m d e Pr o g ramação
Não esquecer de importar as bibliotecas para mensagens de diálogos e para
manipulação de eventos:
Além disso, sua classe deverá implementar a interface ActionListener:
111
Adicionando Eventos (cont.)
Li n g u age m d e Pr o g ramação
112
Li n g u age m d e Pr o g ramação
Ao rodar esse programa, você verá nosso formulário com um label, um campo de texto e um botão.
Depois de digitar algo, ao clicar no botão, você verá uma mensagem com o texto do campo de texto:
113