Java Event Handling

Introduction to Java Event Handling

जब आप किसी GUI application को चलाते समय कोई mouse click करते है या किसी menu में से कोई item select करते है या फिर कोई button press करते है तो events generate होते है। आप ऐसे भी कह सकते है की जब भी user कोई action लेता है तो events generate होते है। User के action लेने पर components की state में change आता है, जिससे compiler को पता चलता है की event generate हुआ है। आप इन events को अपने यूज़ के लिए handle कर सकते है। आप compiler को बताते है की यूज़र mouse click करे तब क्या करना है और button press करे तब क्या करना है। इसे event handling कहते है।

जिस class में event generate होता है उसे आप source class कहते है। और जो class इस event को handle करती है वह listener होती है। Event generate हुआ है, ये जानने के लिए listener class को listener interface implement करना पड़ता है।

Event handling उसी प्रकार है जैसे की आपके घर पर कोई आकर bell बजाये। जब वह व्यक्ति bell बजा रहा है तो वह एक event generate कर रहा है। इस event को आप handle करते है और जाकर दरवाजा खोलते है। इस situation में आपके घर आने वाला व्यक्ति source class है, और आप listener class है। और आपने (listener class ने ) अपने घर में bell लगा रखीं है। Bell यँहा पर listener interface है, जो आपने implement किया है। यँहा पर एक धयान देने योग्य बात ये है की यदि आप bell नहीं लगते तो आपको पता नहीं चलता की कोई व्यक्ति आया है। यानि की जब तक आप listener interface implement नहीं करते है तो तब तक आपको पता नहीं चलता है की कोई event generate हुआ है।

अलग अलग events के लिए अलग अलग तरह के listener interfaces मौजूद है, जैसे की mouse से related events के लिए MouseListener और keyboard से related events के लिए KeyListener आदि। Listener class जिस तरह के events के बारे में notification चाहती है उस interface को implement करती है। उदाहरण के लिए आप Mouse events के बारे में जानना चाहते है। Listener interface implement करने के बाद आप source class में जाकर ये define करते है की जब भी mouse से related कोई event generate हो तो किस class को सूचित किया जाये। ऐसा आप एक method द्वारा करते है, जिसका उदाहरण निचे दिया जा रहा है।

addMouseListener(MouseListener obj) // obj is object of listener class

ये statement जब आप source class में लिखते है, तो source में generate होने वाले सभी mouse related events का notification listener class को मिलता है और listener class उन events को handle करती है। हर listener interface में उस तरह की जितने भी events possible हो सकते है उन सबके लिए एक method होते है। आप इन methods को override करके हर event को handle कर सकते है। जैसे की MouseListener interface 5 तरह के mouse events को handle कर सकता है। ये 5 method निचे दिए जा रहे है। इन सभी methods का यूज़ इनके नाम से ही पता चल जाता है।

  • public void mouseClicked()
  • public void mouseEntered()
  • public void mouseExited()
  • public void mousePressed()
  • public void mouseReleased()

आइये अब इसे एक उदाहरण से समझने का प्रयास करते है। जैसे की आपको पता है, applets event based program होते है। इस उदाहरण में मैने applets प्रयोग किया है। हालांकि आप AWT या Swing library के साथ भी events को यूज़ कर सकते है।

Example of Java Event Handling

// Source class

public class ListenToMe extends Applet
{
  public void init()
  {
    String msg;
    YesSpeak ys = new YesSpeak();
    addMouseListener(MouseListener ys);//passing listener object
  }

  public void paint(Graphics g)
  {
    g.drawString( msg,30,30);
  }
}
//Listener class
class YesSpeak implements MouseListener
{
   ListenToMe lm = new ListenToMe();
   public void mouseClicked(MouseEvent me)
   {
     lm.msg = "Mouse was Clicked!!";
     repaint();
   }

   public void mouseEntered(MouseEvent me)
   {
     lm.msg = "Mouse was entered!!";
     repaint();
   }

   public void mouseExited(MouseEvent me)
   {
    lm.msg = "Mouse was exited!!";
    repaint();
  }

  public void mousePressed(MouseEvent me)
  {
    lm.msg = "Mouse was pressed!!";
    repaint();
  }

  public void mouseReleased(MouseEvent me)
  {
    lm.msg = "Mouse was released!!";
    repaint();
  }
}
//HTML file
<html>
<head>
<title>Event Handling</title>
</head>
<applet code="ListenToMe.java" width=300 height=300>
</applet>
</html>

Adapter Classes

जब आप किसी listener class में कोई listener interface implement करते है, तो आपको उस interface के सभी methods को implement करना पड़ता है। जैसे की आपने पिछले उदाहरण में देखा की mouse listener class के सभी interfaces को implement किया गया। लेकिन ऐसा भी हो सकता है की आप सभी method को implement ना करके किसी एक method को implement करना चाहते हो। ऐसी situation में आप adapter classes को यूज़ कर सकते है।

हर listener interface के लिए एक adapter class provide की गयी है, जैसे की MouseListener interface के लिए MouseAdapter और KeyListener interface के लिए KeyAdapter आदि। ये adapter class उस interface के सभी methods का default implementation provide करती है। आपको सभी methods को implement करने की जरुरत नहीं होती है। जो method आप यूज़ करना चाहते है उसे ही आप override करते है। Adapter classes की मदद से programmers का time बचता है। इसका उदाहरण निचे दिया जा रहा है।

//source class

public class AdapterCall extends Applet
{
   String msg;
   public void init()
   {
     AdapterReply ar = new AdapterReply();
     addMouseListener (ar);
   }

   public void paint(Graphics G)
   {
     g.drawString(msg,30,30);
   }
}
//listener class

class AdapterReply extends MouseAdapter
{
   AdapterCall ac = new AdapterCall();
   public void mouseClicked(MouseEvent me)
   {
     ac.msg = "mouse was clicked";
     repaint();
   }

}
//HTML file

<html>
<head>
<title>adapter handling</title>
</head>
<applet code = "ÄdapterCall.java" width=300 height=300>
</applet>
</html>

Java event handling एक बहुत ही बड़ा topic है, यँहा पर मैने सिर्फ event handling का concept समझाने का प्रयास किया है।