Java ActionListener

Java ActionListener: विभिन्न प्रकार के Event को Represent करने वाली Classes व विभिन्न प्रकार के Events को Handle करने के लिए Implement किए जाने वाले Interfaces की Basic जानकारी प्राप्त करने के बाद अब हम इन्हें Practically Use करना सीखेंगे।

Delegation Event Model में जब कोई Object किसी Event को Generate करता है, तो उस Event को Handle करने के लिए हमें एक Event Listener Class Create करना होता है। ये Event Listener Class उस Object से Generate होने वाले Events को Handle करने के लिए विभिन्न प्रकार के Interfaces को Implement करता है। जिस Object से Generate होने वाले Events को Handle करने के लिए हम जो Listener Class Develop करते हैं, उस Listener Class से Source Object को Register किया जाता है।

यानी Listener को ये बताया जाता है कि वह किस Object से Generate होने वाले Events को Response करेगा या किस Object से Generate होने वाले Events से Notify होगा। एक Component से Generate होने वाले विभिन्न प्रकार के Events को Handle करने के लिए एक से ज्यादा Listener हो सकते हैं।

जावा में विभिन्न प्रकार के GUI Component Objects विभिन्न प्रकार के Events से Associated होते हैं। उदाहरण के लिए जब User किसी Command Button को Press करता है, तो Command Button से Associated Click Event Object Generate होता है। कोई Listener Object तभी किसी Component से Associated Event को Listen या Hear करता है या सुनता है, जब पहले उस Listener Object को Component के साथ Register किया गया होता है।

उदाहरण के लिए यदि किसी MouseListener Object mouseListener को किसी Button Component Object myButton से Generate होने वाले Event Object को Hear करना हो, तो पहले mouseListener Object के साथ myButton Component को Register करना होता है। किसी Component को MouseListener Object mouseListener के साथ Register करने के लिए हमें निम्नानुसार Statement Use करना होता है:

      myButton.addMouseListener(mouseLister);

Java ActionListener : The ActionEvent Class

एक ActionEvent तब Generate होता है, जब User किसी Command Button को Press करता है, या किसी List Item को Double Click करता है या फिर जब किसी Menu Item को Select करता है। ActionEvent Class में चार Integer Constants (ALT_MASK, SHIFT_MASK, CTRL_MAST, META_MASK) को Define किया गया है, जिनका प्रयोग किसी Action Event के साथ Use किए गए किसी Modifier को Represent करने के लिए किया जाता है।

इन Constants के अलावा इस Class में ACTION_PERFORMED नाम का एक और Integer Constant होता है, जिसका प्रयोग किसी Action Event को Identify करने के लिए किया जा सकता है। ActionEvent Class के तीन Constructors निम्नानुसार हैं:

    ActinoEvent(Object src, int type, String cmd)

    ActinoEvent(Object src, int type, String cmd, int modifiers)

    ActinoEvent(Object src, int type, String cmd, long when, int modifiers)

src: ये Argument उस Object को Represent करता है, जिसने Event Generate किया होता है।
type: ये Argument Represent होने वाले Event के Type को Represent करता है।
cmd: ये Argument उस Object के नाम को Represent करता है, जिसने Event Generate किया होता है।
modifiers: जब हम किसी CTRL, SHIFT, ALT, META Keys या इनके Key Combination को Use करके इस Event को Generate करते हैं, यानी किसी List Item पर Double Click करते हैं या किसी Menu Item को Select करते हैं, तब इस modifier में उस Special Key या Key Combination की Information होती है।

जिस Command मे ActionEvent Generate किया गया होता है, उस Command का नाम हम getActionCommand() Method को Use करके प्राप्त कर सकते हैं। इस Method का Syntax निम्नानुसार होता है:

    String getActionCommand()

उदाहरण के लिए जब किसी Button को Press किया जाता है, तब एक ActionEvent Generate होता है और उस Command का नाम जो कि उस Command Button पर दिखाई देने वाला Label होता है, इस Method द्वारा Return किया जा सकता है। परिणामत: हम इस Method को Use करके उस Command का नाम प्राप्त कर सकते हैं, जिसने ActionEvent Generate किया होता है।

किस Modifier (Alt, Ctrl, Shift, Meta) को Use करते हुए ActionEvent को Generate किया गया है, उस Modifier की जानकारी प्राप्त करने के लिए हम getModifiers() Method का प्रयोग कर सकते हैं। इस Method का Syntax निम्नानुसार होता है:

    int getModifiers()

कोई ActionEvent किस समय पर Generate हुआ है, इस बात की जानकारी प्राप्त करने के लिए हम getWhen() Method को Use कर सकते हैं। ये Method निम्नानुसार होता है:

    long getWhen()

मानलो कि हम एक Applet Create करते हैं और हम चाहते हैं कि जैसे ही इस पर स्थित एक Command Button को Click किया जाए, Command Button का Label Change हो जाए। चूंकि Command Button को Click करने पर ActionEvent Generate होता है, इसलिए इस Event को Handle करने के लिए हमें ActionListener Interface को Implement करना होता है। इस Interface को हम निम्नानुसार एक नई Class में Implement कर सकते हैं:

	class MyFirstListener implements ActionListener
	{
		public void actionPerformed(ActionEvent actnEvnt)
		{
			// Executable codes goes here.
		}
	}

Command Button से Generate होने वाले ActionEvent को Handle करने के लिए ActionListener Interface को Implement कर लेने के बाद हमें Command Button को Listener से Register करना होता है।

हम चाहते हैं कि Applet पर स्थित Command Button के Events को ये Listener Listen करे, इसलिए हमें एक Applet Create करना होगा और उस Applet में एक Command Button Create करके उसे इस Listener से Register करना होगा। ये काम हम निम्नानुसार कर सकते हैं:

	class UsingMyFirstListener extends Applet
	{
		public void init()
		{
			Button btnOK = new Button(“OK”);		// Creating Button Object
			
			// Create Listener Object 
			MyFirstListener listenCommandButtonEvent = new MyFirstListener(); 
	
			// Register Command Button with Listener so that 
			// it can here Command Button’s Events
			btnOK.addActionListener(listenCommandButtonEvent);
	
			// Add the Button to the Applet
			add(btnOK);
		}
	}

इस Applet Coding में हमने Applet के init() Method को Override किया है। इस Method में हमने btnOK नाम का एक नया Button Object Create किया है, जिस पर Label “OK” Display करने के लिए Button Class के Constructor को Use किया है।

चूंकि Command Button से Generate होने वाले Events को Here करने के लिए हमने MyFirstListener नाम की एक Class को Define किया है, जिसमें Command Button से Generate होने वाले Events को Listen करने के लिए ActionListener Interface को Implement किया है।

इसलिए हमें इस Listener Class के एक Object से Command Button को Associate करना होता है। इस Listener से Command Button को Associate करने के लिए हमने listenCommandButtonEvent नाम का MyFirstListener Class का एक Object Create किया है। चूंकि Command Button ActionEvent Object Generate करता है, जो कि Action Event को Represent करता है।

इसलिए इस Action Event को listenCommandButtonEvent Listener Object से Register या Associate करने के लिए addActionListener() Method को Button Class के btnOK Button Object के लिए Invoke करना होता है और Argument के रूप में ये listenCommandButtonEvent Listener Object देना होता है, जो Button से Generate होने वाले Events को Handle करता है।

यानी चूंकि Command Button से Generate होने वाले Action Events को MyFirstListener Class का listenCommandButtonEvent नाम का Listener Object Handle करता है, क्योंकि ये Object उस Listener Class का Object है, जिसमें Command Button से Generate होने वाले Action Event Object को Handle करने के लिए ActionListener Interface को Implement किया गया है, इसलिए btnOK Button से listenCommandButtonEvent Object को Register करने के लिए addActionListener() Method में Argument के रूप में listenCommandButtonEvent Listener Object को Pass करना होता है। हमारे इस Program में हमने ये काम निम्न Syntax द्वारा किया है।

        btnOK.addActionListener(listenCommandButtonEvent);

इस पूरी प्रक्रिया को हमें निम्न Steps के अनुसार Follow करना होता है:

  • चूंकि Button Object ActionEvent Generate करता है, इसलिए इन Actions को Listen करने के लिए सबसे पहले हमें एक Listener Class बनानी होती है, जिसमें ActionListener Interface को Implement करना होता है।
  • Listener Create करने के बाद हमें Button Object Create करना होता है और इस Button Object से Generate होने वाले Events Handle करने के लिए जिस Listener Class में ActionListener Interface को Implement किया होता है, उस Class का एक Object Create करना होता है। यानी हमें वह Source Object भी Create करना होता है, जो Events Generate करता है और वह Listener Object भी Create करना होता है, जो Source से Generate होने वाले Events को Listen करता है।
  • Event Generate करने वाला Source Object व Event Listen करने वाला Listener Object दोनों Object को Create करने के बाद हमें Source Object को Listener Object से Register करना होता है, ताकि Source से Generate होने वाले Events को Listener Objects Listen कर सके और Event के Response में Appropriate काम पूरा कर सके। इसके लिए हमें Component Package के addTypeListener() Method को Source के लिए Invoke करना होता है और Argument के रूप में Listener Object देना होता है। इस काम को हम निम्न Syntax अनुसार Perform करते हैं:

      SourceObject.addTypeListener(ListenerObject);

इस पूरे Event Handling Mechanism का सारांश ये है कि जब भी कोई Event Generate होता है, उस Event को Represent करता हुआ एक Appropriate Event Object Create होता है। उस Event को Listen करने के लिए एक Appropriate Listener Interface को Implement करना होता है और अन्त में Event Generate करने वाले Source व Event को Listen करने वाले Listener दोनों का एक & एक Object Create करना होता है।

फिर Source से Listener को Register करने के लिए एक Appropriate Method को Use करना होता है। यानी हर Event से सम्बंधित एक Interface व एक Registration Method होता है। विभिन्न प्रकार के Events, उनके ListenerRegistration Method आपस में Closely Related होते हैं, जिन्हें हम निम्नानुसार Represent कर सकते हैं:

  • जब ActionEvent Generate होता है, तब Event को Listen करने के लिए हमें ActionListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addActionListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addActionListener(ListenerObject);

  • जब AdjustmentEvent Generate होता है, तब Event को Listen करने के लिए हमें AdjustmentListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addAdjustmentListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addAdjustmentListener(ListenerObject);

  • जब ComponentEvent Generate होता है, तब Event को Listen करने के लिए हमें ComponentListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addComponentListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addComponentListener(ListenerObject);

  • जब ContainerEvent Generate होता है, तब Event को Listen करने के लिए हमें ContainerListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addContainerListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addContainerListener(ListenerObject);

  • जब FocusEvent Generate होता है, तब Event को Listen करने के लिए हमें FocusListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addFocusListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addFocusListener(ListenerObject);

  • जब ItemEvent Generate होता है, तब Event को Listen करने के लिए हमें ItemListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addItemListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addItemListener(ListenerObject);

  • जब KeyEvent Generate होता है, तब Event को Listen करने के लिए हमें KeyListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addKeyListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addKeyListener(ListenerObject);

  • जब MouseEvent Generate होता है, तब Event को Listen करने के लिए हमें MouseListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addMouseListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addMouseListener(ListenerObject);

  • जब MouseWheelEvent Generate होता है, तब Event को Listen करने के लिए हमें MouseWheelListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addMouseWheelListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addMouseWheelListener(ListenerObject);

  • जब TextEvent Generate होता है, तब Event को Listen करने के लिए हमें TextListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addTextListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addTextListener(ListenerObject);

  • जब WindowEvent Generate होता है, तब Event को Listen करने के लिए हमें WindowListener Interface को Implement करना होता है और Source से Listener को Associate या Register करने के लिए Source के साथ addWindowListener() Method को Use करना होता है। इस Method को हम निम्नानुसार Use करते हैं:

      SourceObject.addWindowListener(ListenerObject);

अब यदि हम पूरा Example Applet Create करें, तो इस Applet के Source Code निम्नानुसार होंगे:

	// File Name : UsingMyFirstListener.java
	import java.awt.*;
	import java.applet.*;
	import java.awt.event.*;
	
	public class UsingMyFirstListener extends Applet
	{
		public void init()
		{
			Button btnOK = new Button("     OK    ");		//Creating Button Object
			
			// Create Listener Object 
			MyFirstListener listenCommandButtonEvent = new MyFirstListener(); 
	
			// Register Command Button with Listener so that 
			// it can here Command Button's Events
			btnOK.addActionListener(listenCommandButtonEvent);
	
			// Add the Button to the Applet
			add(btnOK);
		}
	} 
	
	class MyFirstListener implements ActionListener
	{
		public void actionPerformed(ActionEvent actnEvnt)
		{
			Button source = (Button)actnEvnt.getSource();
			source.setLabel("Clicked");
		}
	}

इस Source Code में हम देख सकते हैं, कि हमने MyFirstListener Listener Class में actionPerformed() Method को Modify किया है। ActionEvent Class में getSource() नाम का एक Method होता है। ये Method उस Component का Reference Return करता है, जिसने Event Generate किया है।

यानी Applet Window पर स्थित Command Button को Click करने पर जो Click Event Generate होता है, उस Click Event को Generate करने वाले Command Button के Reference को getSource() Method द्वारा प्राप्त किया जा सकता है।

चूंकि हम Listener में जिस Object का Reference प्राप्त करना चाहते हैं, वह एक Command Button है, इसलिए हमने MyFirstListener Class में Button Class का source नाम का एक नया Object Create किया है, ताकि btnOK Button को इस Class के actionPerformed() Method में source नाम के Object द्वारा Access कर सकें। ये काम हमने निम्न Statement द्वारा किया है:

        Button source = (Button)actnEvnt.getSource();

जब Applet Run होता है और हम Applet पर स्थित btnOK Button पर Click करते हैं, तो एक Action Event Generate होता है। इस Action Event को Listener Listen करता है और जिस Object ने Event Generate किया है, उस Source Object को Argument के रूप में actnEvnt नाम के Object में प्राप्त करता है।

चूंकि इस Applet में btnOK Button ही Action Event Generate कर रहा है, इसलिए actnEvnt नाम का Object btnOK Button का Reference ही Hold करता है। इसलिए जब getSource() Method का प्रयोग करके उस Source Object का पता लगाना होता है, जिसने Event Generate किया है, तो btnOK Button का Reference ही Return होता है।

चूंकि हमें इस Reference को एक नए Button प्रकार के Object source में Store करना होता है, ताकि Source द्वारा btnOK Button को Refer किया जा सके, इसलिए Return होने वाले Source Object के नाम को Button प्रकार के मान में Convert करने के लिए (Button) शब्द से Type Casting किया गया है। इस तरह से source नाम के Object में btnOK Button का Reference Store हो जाता है।

यानी ये Object भी उसी Memory Location को Refer करता है, जेसे btnOK Button Object करता है। इसलिए हम btnOK Object के स्थान पर इस source Object का प्रयोग करके यदि Button के Label को Change करते हैं, तो btnOK Button का Label ही Change होगा। क्योंकि दोनों ही Objects समान Memory Location को Refer कर रहे हैं। इसलिए btnOK Button का Label Change करने के लिए हमने निम्न Statement Use किया है:

        source.setLabel(“Clicked”);

जब हम btnOK Button पर Click करते हैं, तब उसका Label “OK” से Change होकर “Clicked” हो जाता है। इस Program को निम्नानुसार Modify करके हम दो Button Objects से Generate होने वाले Action Events को अलग-अलग तरीके से Handle कर सकते हैं।

	// File Name : UsingMyFirstListener.java
	import java.awt.*;
	import java.applet.*;
	import java.awt.event.*;
	
	public class UsingMyFirstListener extends Applet
	{
		public void init()
		{
			Button btnOK = new Button("     OK     ");		// Creating Button Object
			Button btnCancel = new Button("   Cancel  ");	
			
			// Create Listener Object 
			MyFirstListener listenCommandButtonEvent = new MyFirstListener(); 
	
			// Register Command Button with Listener so that 
			// it can here Command Button's Events
			btnOK.addActionListener(listenCommandButtonEvent);
			btnCancel.addActionListener(listenCommandButtonEvent);
	
			// Add the Button to the Applet
			add(btnOK);
			add(btnCancel);
		}
	} 
	
	class MyFirstListener implements ActionListener
	{
		public void actionPerformed(ActionEvent actnEvnt)
		{
			Button source = (Button)actnEvnt.getSource();
			if(source.getLabel() == "     OK     ")
				source.setLabel("Clicked");
	
			if(source.getLabel() == "   Cancel  ")
				source.setLabel("UnClick");
		}
	}

इस Program के Listener को हम निम्नानुसार Modify कर सकते हैं, जहां getLabel() Method के स्थान पर getActionCommand() Method को Use किया गया है। ये Method उस Source Command का Label Return करता है, जिसने Action Event को Generate किया होता है।

चूंकि हमारे Program में Command Button ही Acton Event Generate कर रहा है, इसलिए इस Method से Applet पर स्थित दोनों Buttons में से उस Button का नाम ही Return होता है, जिसने Event Generate किया होता है। ये Modified Listener निम्नानुसार है:

	class MyFirstListener implements ActionListener
	{
		public void actionPerformed(ActionEvent actnEvnt)
		{
			Button source = (Button)actnEvnt.getSource();
			if(source.getActionCommand() == "     OK     ")
				source.setLabel("Clicked");
	
			if(source.getActionCommand() == "   Cancel  ")
				source.setLabel("UnClick");
		}
	}

हम किसी Applet में एक दूसरे तरीके से भी विभिन्न प्रकार के Events को Handle कर सकते हैं। जब हम किसी Applet में Delegation Event Model को Use करना चाहते हैं, तब हमें निम्नानुसार काम करने होते हैं:

  • Appropriate Interface को Applet में ही Implement करना होता है, ताकि ये Interface Desire प्रकार के Event को Receive कर सके।
  • यदि जरूरी हो तो Listener को Event Notification प्राप्त करने के लिए एक Recipient की तरह Register या Un-register करने के लिए Code Implement करें।

 

एक Source Object एक से ज्यादा प्रकार के Event Generate करने में सक्षम होता है और Source द्वारा Generate किए जा सकने वाले हर Event को Handle करने वाले विभिन्न Event Handling Methods को Interface में अलग से Define किया जाता है।

इसी तरह से किसी एक ही Source Object को एक से अधिक प्रकार के Events को Receive करने के लिए Register किया जा सकता है, लेकिन जब इस प्रकार की स्थिति होती है, तब Object द्वारा Receive किए जाने वाले विभिन्न प्रकार के Events जिस Interface से सम्बंधित होते हैं, उन सभी Interfaces को Implement करना जरूरी होता है। Delegation Event Model किस प्रकार से काम करता है, इसे समझने के लिए हम सबसे ज्यादा Event Generate करने वाले Source Keyboard व Mouse को Handle करना सीखेंगे।

Java Programming Language in Hindiये Article इस वेबसाईट पर Selling हेतु उपलब्‍ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी। 

Java Programming Language in Hindi | Page: 682 | Format: PDF

BUY NOW GET DEMO REVIEWS