AULA TEÓRICA 14 Tema 11. Tratamento de eventos de mouse 1 1 Tratamento de eventos de mouse Os eventos de mouse podem ser capturados por qualquer componente GUI que se derive de java.awt.Component. Alguns dos tipos de eventos mais comuns (inclusive de janela): Métodos Interface Chamada MouseListener mousePressed(MouseEvent ev) Quando um botão do rato é pressionado sobre um componente mouseClicked(MouseEvent ev) Quando um botão do rato é pressionado e é liberado mouseEntered(MouseEvent ev) Quando o rato entra numa janela mouseExited(MouseEvent ev) Quando o rato sai de uma janela MouseMotionListener mouseDragged(MouseEvent ev) Quando o rato é deslocado com o botão windowClosed() premido Quando o rato é deslocado sem que o botão esteja premido Quando a janela acabou de ser fechada windowOpened() Quando a janela é aberta WindowActivated() Quando a janela é activada WindowDeActivated() Quando a janela é desactivada mouseMoved(MouseEvent ev) WindowListener 2 O processamento destes eventos é semelhante ao que foi descrito anteriormente, sendo necessário associar a cada componente um processador de evento adequado e descrever o comportamento da aplicação como resposta a cada um dos métodos definidos nesse processador. De referir que nada impede que sejam associados vários processadores de eventos a um mesmo componente. Os métodos das interfaces MouseListener e MouseMotionListener são resumidos no exemplo a seguir. Cada um dos métodos de tratamento de eventos do mouse recebe um objecto MouseEvent como argumento. O objecto MouseEvent contém as informações sobre o evento que ocorreu, incluindo as coordenadas x e y da posição em que o evento ocorreu. A classe da aplicação implementa as duas interfaces de modo a poder esperar seus próprios eventos de mouse. Observe que todos os sete métodos dessas duas interfaces devem ser definidos pelo programador quando uma classe implementa as duas interfaces. 3 import import import public java.awt.*; java.awt.event.*; javax.swing.*; class MouseTracker extends JFrame implements MouseListener,MouseMotionListener { private JLabel statusBar; public MouseTracker() { super("Demonstrating Mouse Events"); statusBar = new JLabel(); getContentPane().add(statusBar, BorderLayout.SOUTH); addMouseListener(this); addMouseMotionListener(this); setSize(275, 100); setVisible(true); } 4 //implementação de métodos do MouseListener, processa o evento quando mouse // é largado immediatamente apos de ser pressionado public void mouseClicked(MouseEvent event ) { statusBar.setText("Clicked at ["+event.getX()+", "+ event.getY()+"]" ); } //processa o evento quando mouse é pressionado public void mousePressed( MouseEvent event ) { statusBar.setText( "Pressed at ["+event.getX()+", "+ event.getY()+"]"); } //processa o evento quando mouse é largado apos de ser arrastado public void mouseReleased(MouseEvent event ) { statusBar.setText("Released at ["+event.getX()+", " + event.getY() + "]" ); } //processa o evento quando mouse entra em uma área public void mouseEntered(MouseEvent event ) { JOptionPane.showMessageDialog(null, "Mouse in window" ); } //processa o evento quando mouse entra sai de uma área public void mouseExited(MouseEvent event) { statusBar.setText("Mouse outside window"); } 5 // implementação de métodos do MouseMotionListener //processa o evento quando mouse é arrastado com o botão pressionado public void mouseDragged( MouseEvent event ) { statusBar.setText("Dragged at [" +event.getX()+", "+ event.getY()+"]" ); } //processa o evento quando mouse é movimentado public void mouseMoved( MouseEvent event ) { statusBar.setText("Moved at [" + event.getX()+", "+ event.getY()+"]"); } public static void main(String args[] ) { MouseTracker application = new MouseTracker(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } A caixa de diálogo de mensagem aparece quando o mouse se move para dentro da janela. 6 Pop-up Menu (em resposta ao clique com botão direito) The JPopupMenu Class menus não estão ligados a um bara de menu; • Estes • São menus livres que estão associados à um componente; • • Eles são activados por um evento pop-up trigger que ocorre quando o mouse está sobre o componente . Em AWT e Swing, este trigger é tipicamente um evento do mouse. Uma vez activado, o utlizador pode interagir com o menu normalmente. Exemplo do método processMouseEvent() que activa um pop-up menu depois de receber o trigger certo: public void processMouseEvent(MouseEvent e) { if (e.isPopupTrigger( )) { popup.show(this, e.getX( ), e.getY( )); } else { super.processMouseEvent(e); } 7 Referência bibliográfica: António José Mendes; Maria José Marcelino. “Fundamentos de programação em Java 2”. FCA. 2002. Elliot Koffman; Ursula Wolz. “Problem Solving with Java”. 1999. F. Mário Martins; “Programação Orientada aos objectos em Java 2”, FCA, 2000, John Lewis, William Loftus; “Java Software Solutions: foundation of program design”, 2nd edition, Addision-Wesley John R. Hubbard. “Theory and problems of programming with Java”. Schaum’s Outline series. McGraw-Hill. H. Deitel; P. Deitel. “Java, como programar”. 4 edição. 2003. Bookman. Rui Rossi dos Santos. “Programando em Java 2– Teoria e aplicações”. Axcel Books. 2004 8