/* Title: ActionAdapter,java Author: Markku Lehtinen Date: Nov -97 Description: Yleisadapteri eri tyyppisten viestien käsittelemiseen Konstruktorin parametrit: int action Tapahtuma, joka aiheutti ActionAdapterin kutsumisen. esim. keyEvent.KEY_PRESSED mouseEvent.MOUSE_CLICKED mouseEvent.MOUSE_PRESSED Object parent Kutsuvan luokan osoite. (konstruktorin kutsussa this). String method Kutsuvaan luokkaan kuuluva metodi, joka käynnistetään, kun action -niminen tapahtuma esiintyi. Parametrina on metodin nimi String -muodossa. Metodilla täytyy olla kaksi Object -tyyppistä parametria. Esim. public void button_actionPerformed(Object o, Object event) välitetään vain metodin nimi: "button_actionPerformed" Object o tarkoittaa objektia, joka on yhteydessä viestin käsittelyyn. Muutetaan tyyppimuunnoksella halutun tyyppiseksi luokaksi. Object event Tapahtuma, joka aiheutti käsittelijän kutsun. Muutetaan tyyppimuunnoksella halutunlaiseksi. Esim. jos käsittelijä on hiiren toimintaa tutkiva metodi, muutetaan event tyypiksi MouseEvent. event sisältää tiedot tapahtuneesta toiminnasta. Object actionObject Objecti, joka välitetään käynnistettävälle metodille, joka käsittelee tapahtuman. Edellisesn kohdan Object o. ActionAdapter -luokka annetaan parametrina eri Event -tyyppien käsittelyä komponenttiin lisäävälle funktiolle addXXXListener. */ package omat.adapter; import java.lang.reflect.*; import java.lang.*; import java.awt.event.*; public class ActionAdapter implements java.awt.event.KeyListener, java.awt.event.MouseListener, java.awt.event.ActionListener /* Vain nämä toteutettu tällä hetkellä */ { Method method; int action; Object parent; Object[] params = new Object[2]; public ActionAdapter(int action, Object parent, String method, Object action_object) { this.action = action; this.parent = parent; this.params[0] = action_object; this.method = getThisActionMethod(parent,method); } /* KeyEvents */ public void keyPressed(KeyEvent e) { if( action == e.KEY_PRESSED ) invoke(e); } public void keyReleased(KeyEvent e) { if( action == e.KEY_RELEASED ) invoke(e); } public void keyTyped(KeyEvent e) { if( action == e.KEY_TYPED ) invoke(e); } /* MouseEvents */ public void mouseExited(MouseEvent e) { if( action == e.MOUSE_EXITED ) invoke(e); } public void mouseEntered(MouseEvent e) { if( action == e.MOUSE_ENTERED ) invoke(e); } public void mousePressed(MouseEvent e) { if( action == e.MOUSE_PRESSED ) invoke(e); } public void mouseReleased(MouseEvent e) { if( action == e.MOUSE_RELEASED ) invoke(e); } public void mouseClicked(MouseEvent e) { if( action == e.MOUSE_CLICKED ) invoke(e);} /* ActionEvent */ public void actionPerformed(ActionEvent e) {invoke(e); } void invoke(Object event) { try { params[1]=event; method.invoke(parent,params); } catch (Exception e) { System.out.println("Error: "+e.toString()); } } Method getThisActionMethod(Object source_this, String name) { int i; Class[] params = new Class[2]; Method method = null; try { params[0] = params[1] = source_this.getClass().forName("java.lang.Object"); method = source_this.getClass().getMethod(name,params); } catch (Exception e) { System.out.println(e.toString()); System.exit(0); } return method; } }