Sie sind auf Seite 1von 13

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi
Controle de Eventos Classes receptoras de evento Quando uma janela precisa implementar um evento, ela precisa implementar uma interface, que nada mais que uma classe receptora de evento. Cada classe receptora de evento trata de um evento diferente. A seguir, listamos os principais eventos da classe Swing: Evento ActionListener AdjustmentListener FocusListener ItemListener KeyListener MouseListener MouseMotionListener WindowListener ComponentListener Descrio Eventos de ao como o clique do mouse sobre um boto. Eventos de ajuste que ocorre quando o componente est sendo ajustado, por exemplo, como o ajuste de uma barra de rolagem. Eventos de foco, gerados quando o componente recebe ou perde o foco, por exemplo quando uma caixa de textos recebe ou perde o foco. Eventos gerados quando o item selecionado de uma lista mudado, por exemplo, quando o usurio escolhe um item de um componente List ou Combo. Refere-se ao evento do teclado, que ocorrem quando uma tecla pressionada, quando solta etc. Os eventos gerados pelo mouse. Por exemplo, quando ele clicado, quando entra ou sai da rea de um componente. Refere-se a eventos do mouse, gerados pela movimentao dele sobre um componente. Refere-se a eventos de janela, gerados quando uma janela maximizada, minimizada etc. Refere-se a qualquer componente de uma janela, gerado quando o componente torna-se visvel, torna-se oculto, movido ou redimensionado.

por

classe.

Para uma classe implementar um evento necessrio incluir a clusula implements na declarao da Por exemplo, a declarao abaixo, faz com que a classe utilize os eventos ActionListener e

FocusListener:

public class NomeClasse implements ActionListener, FocusListener { }

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi
Mtodos para Manipulao de eventos O componente que gerar um evento dever ser registrado, para que se identifique qual objeto gerar que evento. Os mtodos para registrar os objetos usados nas aplicaes para o pacote Swing so: Mtodo addActionListener() addItemListener() addFocusListener() addAdjustmentListener() addMouseListener() addMouseMotionListener() addKeyListener() addWindowListener() addComponentListener() Componentes que podem us-lo JButton, JCheckBox, JComboBox, JTextField, JRadioButton. JButton, JCheckbox, JComboBox, JRadioButton. Todos os componentes do swing. JScroolBar Todos os componentes do swing. Todos os componentes do swing. Todos os componentes do swing. JWindow e JFrame Todos os componentes do swing.

por

Toda vez que uma interface receptora de evento implementada, necessrio declarar os mtodos que realizaro o controle dos eventos. A seguir, a tabela destes mtodos: Interface ActionListener Evento ActionEvent Mtodos a serem declarados actionPerformed: Mtodo executado quando o mouse clicado sobre um componente ou quando o ENTER pressionado sobre um componente. adjustmentValueChanged: mtodo executado quando o valor de um componente alterado. focusGained: mtodo executado quando um componente recebe o foco. focusLost: mtodo executado quando um componente perde o foco. KeyPressed: mtodo executado quando uma tecla pressionada sobre um componente. keyReleased: mtodo executado quando uma tecla solta sobre um componente. keyTyped: mtodo executado quando uma tecla Unicode, isto , uma tecla que possui um cdigo relacionado pressionado pressionada sobre um componente. As teclas SHIFT, ALT, CTRL direcionais, Insert, Delete, teclas de funo, entre outras, no executam este mtodo. A diferena deste mtodo para o keyPressed que este mtodo pode diferenciar o caracter lido: 'a' ou 'A'. mousePressed: mtodo executado quando o boto do mouse pressionado sobre um componente. mouseClicked: mtodo executado quando o boto do mouse solto sobre um componente. mouseEntered: mtodo executado quando o

AdjustumentListener FocusListener

AdjustmentEvent FocusEvent

KeyListener

KeyEvent

MouseListener

MouseEvent

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi
ponteiro do mouse entra na rea de um componente. mouseExited: mtodo executado quando o ponteiro do mouse sai da rea de um componente. mouseReleased: mtodo executado quando o mouse arrastado sobre um componente. mouseMoved: mtodo executado quando o ponteiro do mouse se move sobre um componente. mouseDragged: mtodo executado quando o ponteiro do mouse arrastado sobre um componente. windowClosing: mtodo executado enquanto a janela est sendo fechada. windowClosed: mtodo executado aps a janela ter sido fechada. windowActivated: mtodo executado quando a janela ativada. windowDeactivated: mtodo executado quando a janela desativada. windowIconified: mtodo executado quando a janela minimizada. windowDeiconified: mtodo executado quando a janela restaurada. windowOpened: mtodo executado quando a janela aberta pelo mtodo show():

por

MouseMotionListener()

MouseEvent

windowListener

windowEvent

Existem alguns mtodos especiais que atuam no teclado e no mouse, que podem verificar algumas caractersticas da gerao do evento.

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi
Mtodos relacionados com o mouse (MouseEvent): int getClickCount() int getX() int getY() boolean isPopupTrigger() boolean isAltDown() boolean isControlDown() boolean isShiftDown() retorna o nmero de vezes que o mouse foi clicado. retorna a posio X do ponteiro do mouse sobre o componente. retorna a posio Y do ponteiro do mouse sobre o componente. retorna verdadeiro se o evento gerado pelo mouse causa a abertura de um menu do tipo Popup. retorna verdadeiro se a telca ALT estava pressionada quando o mouse foi clicado. retorna verdadeiro se a tecla CTRL estava pressionada quando o mouse foi clicado. retorna verdadeiro se a tecla ALT estava pressionada quando o mouse foi clicado.

por

Mtodos relacionados ao evento do teclado (KeyEvent): int getKeyChar() e setKeyChar() int getKeyCode() e setKeyCode() retorna e gera o caracter Unicode relacionado ao evento. retorna e gera o caractere relacionado ao evento. Por exemplo: para gerar a tecla ESC, isto , para simular a ao de o usurio ter pressionado a tecla ESC, pode ser usado setKeyCode(e.VK_ESCAPE).

boolean isAltDown(), boolean funciona da mesma forma que o descrito para o evento do isControlDown() e boolean isShiftDown() mouse. O programa seguinte ilustra uma srie de eventos discriminados no quadro abaixo: Eventos da janela: Logo que a aplicao iniciada, uma mensagem apresentada; quando a janela dimensionada ou movida, mensagens so apresentadas; quando a janela maximizada as duas mensagens anteriores so apresentadas. Eventos de boto: Quando o ponteiro do mouse colocado sobre o boto sua cor muda para amarelo; Quando o mouse deixa o boto sua cor volta a ser cinza; Quando o mouse incide sobre o boto, as coordenadas do ponteiro do mouse so apresentadas. Eventos da 1a caixa de texto: Ao movimentar as teclas de direo (setas), a janela movida e uma mensagem apresentada; Ao pressionar a tecla ENTER o cursor vai para a segunda caixa. Eventos da 2a caixa de texto: Quando esta caixa recebe ou perde o foco, uma mensagem apresentada; esta caixa aceita apenas a edio de valores numricos, utilizando somente o teclado numrico (lado direito do teclado); aps a edio do nmero nesta caixa, o produto do valor da primeira caixa com o valor da segunda caixa apresentada na terceira caixa de texto.

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

import import import import

java.awt.*; java.awt.event.*; javax.swing.*; javax.swing.event.*;

public class Exemplo1001 extends JFrame implements MouseListener, KeyListener, TextListener, FocusListener,MouseMotionListener //interfaces para controle de eventos { JButton B1; JLabel L1,L2; JTextField T1,T2; TextField T3; static int E=100,T=100; public static void main(String[] args) { JFrame Janela = new Exemplo1001(); Janela.show(); WindowListener x = new WindowAdapter() { // Eventos associados a janelas public void windowClosing(WindowEvent e) { System.exit(0); } public void windowActivated(WindowEvent e) { // A Janela foi ativada } public void windowDeactivated(WindowEvent e) { // A Janela foi desativada } public void windowIconified(WindowEvent e) { // A Janela foi minimizada } public void windowDeiconified(WindowEvent e) { // A Janela foi restaurada }

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

public void windowOpened(WindowEvent e) { mostraMensagem("A Janela foi aberta"); } public void windowClosed(WindowEvent e) { // A Janela foi fechada } }; Janela.addWindowListener(x); ComponentListener y = new ComponentAdapter() { // Outros eventos de janela public void componentHidden(ComponentEvent e) { mostraMensagem("A janela tornou-se oculta"); } public void componentMoved(ComponentEvent e) { mostraMensagem("A janela foi movida"); } public void componentResized(ComponentEvent e) { mostraMensagem("A janela foi redimensionada"); } public void componentShown(ComponentEvent e) { mostraMensagem("A janela tornou-se visvel"); } }; Janela.addComponentListener(y); } Exemplo1001() { setTitle("Manipulao de Eventos"); setSize(280,200); setLocation(E,T); getContentPane().setLayout(new GridLayout(6,1)); L1 = new JLabel(""); L2 = new JLabel(""); B1 = new JButton ("Eventos do Boto"); T1 = new JTextField(); T2 = new JTextField(); T3 = new TextField();

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

//registram os eventos MouseListener e //MouseMotionListener para o boto B1. B1.addMouseListener(this); B1.addMouseMotionListener(this); B1.setBackground(Color.gray); /*adiciona o evento KeyListener ao campo T1. Desta forma, quando uma tecla for pressionada, os mtodos que controlam esse evento (keyPressed, keyReleased e keyTyped) sero executados */ T1.addKeyListener(this); /*adiciona o evento TextListener ao campo T3. Desta forma, quando o campo T3 for alterado, o evento textValueChanged executado. Note que T3 no da classe JTextField (swing), e sim da classe TextField, pertencente ao pacote AWT. Isto foi feito porque swing no implementa a interface TextListener. Apesar deste exemplo, misturar classes do pacote swing com AWT, no se recomenda fazer isto */ T3.addTextListener(this); //adiciona o evento KeyListener ao campo T3. T3.addKeyListener(this); /*Adiciona o evento FocusListener ao campo T3. Quando T3 receber ou perder o foco, os mtodos que controlam esse evento (focusGained e focusLost) sero executados. */ T3.addFocusListener(this); getContentPane().add(B1); getContentPane().add(L1); getContentPane().add(L2); getContentPane().add(T1); getContentPane().add(T3); getContentPane().add(T2); } // mtodos relativos a MouseListener public void mousePressed(MouseEvent e) { L1.setText("O boto do Mouse foi pressionado"); mostraMensagem(""+e.getClickCount() + " " + e.getX()+ " " + e.getY()); } public void mouseClicked(MouseEvent e) { L1.setText("O boto do Mouse foi solto"); } public void mouseEntered(MouseEvent e) { // o ponteiro do mouse entrou na rea B1.setBackground(Color.yellow); }

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

public void mouseExited(MouseEvent e) { // o ponteiro do mouse saiu da rea B1.setBackground(Color.gray); } public void mouseReleased(MouseEvent e) { L1.setText("O ponteiro do Mouse foi arrastado"); }

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

// mtodos relativos a MouseMotionListener public void mouseMoved(MouseEvent e) { L2.setText("Mouse se moveu em "+e.getX()+" , "+e.getY()); } public void mouseDragged(MouseEvent e) { L2.setText("Mouse foi arrastado em "+e.getX()+" , "+e.getY()); } // mtodos relativos a KeyListener public void keyPressed(KeyEvent e) { // uma tecla foi pressionada if (e.getSource()==T1) { //ENTER ou TAB if(e.getKeyCode()==10 || e.getKeyCode()==9) { //e.setKeyCode(9); //gera TAB T3.requestFocus(); //Coloca foco em T3 return; } if(e.getKeyCode()==38) //SETA PARA CIMA { T = T - 5; setLocation(E,T); //move tela para cima if(e.getKeyCode()==40) //SETA PARA BAIXO { T = T + 5; //move tela para baixo setLocation(E,T); } if(e.getKeyCode()==37) //SETA PARA ESQUERDA { E = E - 5; setLocation(E,T); //move tela esquerda } if(e.getKeyCode()==39) //SETA PARA DIREITA { E = E + 5; setLocation(E,T); //move tela direita } } if (e.getSource()==T3) { //ENTER ou TAB if(e.getKeyCode()==10 || e.getKeyCode()==9)

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

{ //e.setKeyCode(9); //gera TAB T2.requestFocus(); return; } if(e.getKeyCode()==8) //tecla BACKSPACE? return; //verifica se NO teclado numrico if(e.getKeyCode()<96 || e.getKeyCode()>105) { e.setKeyCode(e.VK_ESCAPE); //cancela tecla return; } } } public void keyReleased(KeyEvent e) { // uma tecla foi solta } public void keyTyped(KeyEvent e) { // uma tecla Unicode foi pressionada } // mtodo relativo a TextListener public void textValueChanged(TextEvent e) { // o contedo do campo texto foi alterado int n1,n2; try { n1 = Integer.parseInt(T1.getText()); n2 = Integer.parseInt(T3.getText()); T2.setText(""+n1*n2); } catch(NumberFormatException erro) { T2.setText("0"); return; } } //Mtodos relativos a FocusListener public void focusGained(FocusEvent e) { // o objeto recebeu o foco L1.setText("O objeto T3 recebeu o foco"); }

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

public void focusLost(FocusEvent e) { // o objeto perdeu o foco L1.setText("O objeto T3 perdeu o foco"); } // Mtodo do programador public static void mostraMensagem(String men) { JOptionPane.showMessageDialog(null,men, "Mensagem", JOptionPane.INFORMATION_MESSAGE); } } O exemplo seguinte apresenta o cdigo da tecla pressionada na primeira caixa de texto.

caixa de texto JTextField

import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Exemplo1002 extends JFrame implements KeyListener { JTextField T1,T2; public static void main(String[] args) { JFrame Janela = new Exemplo1002(); Janela.show(); WindowListener x = new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }; Janela.addWindowListener(x);

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi

por

} Exemplo1002() { setTitle("Cdigo das teclas"); setSize(190,65); setResizable(false); setLocation(100,100); getContentPane().setLayout(new GridLayout(2,1)); T1 = new JTextField(); T2 = new JTextField(); T1.addKeyListener(this); getContentPane().add(T1); getContentPane().add(T2); } public void keyPressed(KeyEvent e) { T2.setText(""+e.getKeyCode()); } public void keyReleased(KeyEvent e) {} public void keyTyped(KeyEvent e) {} }

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.

Portal Java Tutorial: Pacote Swing Controle de Eventos

Daniel Badawi
Sobre o autor Daniel Badawi estudante de cincias da computao da FMU, So Paulo, SP. Amante de Java e do Portal Java. Referncias bibliogrficas
Livros - Java 2: Ensino Didtico: Desenvolvendo e Implementando Aplicaes
SERGIO FURGERI Editora rica

por

Portal Java A maior comunidade de Java do Brasil www.portaljava.com Todos os direitos reservados. Proibida a utilizao ou replicao deste material sem prvio aviso.