Event Handling in Java: जावा में किसी Event को Handle करने के दो Model प्रयोग में लिए जाते हैं। पहला Model JDK 1.02 के लिए Develop किया गया था जबकि दूसरा Model JDK 1.2 के लिए Develop किया गया था। दूसरे तरीके को “Delegation Model” भी कहते हैं।
Event Handling in Java: JDK 1.02 Event Model
पहले Model में Windows के सभी Events की Processing को एक Event Class में Encapsulate किया गया था। इसमें Program द्वारा Handle किए जाने वाले विभिन्न Events को Represent करने वाली “Events के Constants” की एक List थी। इन Constants का प्रयोग Generate होने वाले Event के Type को Identify करने के लिए किया जाता था।
ये पता लगाने के लिए कि Event Generate होते समय User ने Ctrl, Alt या Shift जैसी Special Keys को Press कर रखा था या नहीं, इस Event Class में कुछ Methods भी थे। हम इन Methods से ये पता लगा सकते थे कि Mouse के किस Button का प्रयोग करने पर Event Generate हुआ था।
JDK 1.02 में Events को Handle करने के लिए जिस Model का प्रयोग किया जाता था, वह Model Inheritance Model पर आधारित था। इस Model में हमें विभिन्न प्रकार के Window Components को एक Sub Class में Inherit करने के बाद इस Class के Action() व handleEvent() Method को Override करना पडता था।
इन Methods द्वारा यदि True Return होता था तो इसका मतलब था कि Event ठीक तरीके से Handle हो गया है, जबकि यदि इन Methods से False Return होता था, तो इसका मतलब होता था कि Event ठीक तरह से Handle नहीं हो पाया है और उसे पूरी तरह से Handle होने के लिए और Processing की जरूरत है। यदि Method False Return करता था तो Event Component के Container में Pass हो जाता था। Container के बारे में हम आगे समझेंगे।
इस तरीके से Events को Handle करने की सबसे बडी कमी ये थी कि किसी Event को उस Component द्वारा भी Handle किया जा सकता था, जो कि Event या उसके Container से Initiated होते थे। ऐसा होने से Object Oriented Programming Concept के उस नियम का उल्लंघन होता था, जिसमें किसी Object की Functionality उसकी Class में ही स्थित होती है।
इस तरीके की दूसरी कमी ये थी कि इसमें Containment Hierarchy द्वारा Unimportant Events को भेजने से CPU Cycles Waste होते थे। इस Model में कोई भी ऐसा तरीका नहीं था जिससे Unimportant Events को Ignore किया जा सकता हो। इन कमियों से छुटकारा पाने के लिए JDK 1.1 में “Delegation Event Model” को Develop किया गया।
Event Handling in Java: Delegation Model
इस Model में हम उन Objects को Specify कर सकते हैं, जिन्हें किसी Event के Generate होने पर Notify किया जा सके कि Generate होने वाला Event किस Object के लिए है। यदि Generate होने वाला Event किसी भी Object से सम्बंधित ना हो, तो वह Event Discard हो जाता है। JDK 1.2 का Model यानी Delegation Event Model मुख्यत: चार Components पर आधारित होता है:
- Event Classes
- Event Listeners
- Explicit Event Handling
- Adapters
Event Classes
Event Class Hierarchy में EventObject Class सबसे पहली या Top की Class होती है। ये Class java.util Package से Related Class है। Event से सम्बंधित ज्यादातर अन्य Classes java.awt.event Package से Related Class होती हैं। java.util.EventObject Class व java.awt.AWTEvent Class java.awt.event Package से सम्बंधित Classes नहीं हैं। JDK 1.2 की Event Class की Hierarchy को हम निम्नानुसार दर्शा सकते हैं:
वे Classes जो Events को Represent करती हैं, जावा के Event Handling Mechanism की Fundamental Classes हैं। EventObject जावा के Event Classes की Hierarchy की Top Level Class है, जिसे java.util Package में Define किया गया है। ये सभी Event Classes की Super Class है। इसका एक Constructor निम्नानुसार है:
EventObject(Object src);
इस Constructor में src वह Object है, जो Event Generate करता है। EventObject Class में getSource() व getID() नाम के दो Methods हैं। EventObject Class का getSource() Method उस Object को Return करता है, जिसने Event को Generate किया होता है। इस Method का General Form निम्नानुसार होता है:
Object getSource()
चूंकि toString() Method Generate होने वाले Event का String Representation Return करता है। इसलिए हम इस Method को Use करके उस Object का नाम प्राप्त कर सकते हैं, जिसने Event Generate किया होता है या फिर हम अपनी जरूरत के अनुसार किसी Event की Type Casting करके उसे अलग तरीके से भी Use कर सकते हैं।
java.awt Package में AWTEvent नाम की एक Sub Class को Define किया गया है, जो कि EventObject Class की एक Sub Class है। ये Class Delegation Event Model में (Directly या Indirectly) Use की जाने वाली सभी AWT – Based Event Classes की Super Class होती है। EventObject Class का getID() Method उस Event ID को Return करता है, जो Event की प्रकृति को निर्धारित करता है। इस Method का General Form निम्नानुसार होता है:
int getID()
मानलो यदि एक Mouse Event Generate होता है, तो हम इस Method को Use करके ये पता लगा सकते हैं कि किस Class के Object से Event Generate हुआ है। यानी Event Object से Click Event Generate हुआ है या Drag Event Generate हुआ है या Move Event Generate हुआ है या Mouse Button को Release किया गया है।
जैसाकि हम पिछले चित्र में देख सकते हैं, कि जितनी भी Event Classes हैं, उन सभी Event Classes को AWTEvent Class से Derive किया गया है। यानी यदि सारांश में कहें तो EventObject Class सभी Event की Super Class है और AWTEvent सभी AWTEvent Class सभी AWT Event Classes की Super Class है, जिन्हें Delegation Event Model में Use किया जाता है।
java.awt.event Package में विभिन्न प्रकार के Events को Handle करने की Classes को Define किया गया है। किस स्थिति में कौनसा Event Generate होता है, इसकी जानकारी हमें निम्न बिन्दुओं से प्राप्त हो सकती है:
- जब कोई Component Activate होता है, कोई Button Press होता है, कोई List Item Double Clicked होता है या किसी Menu Item को Select किया जाता है, तब ActionEvent Object Generate होता है।
- जब Scrollbar या किसी Adjustable Element को Use किया जाता है, तब AdjustmentEvent Generate होता है।
- जब कोई Component Hide, Visible, Move या Resize किया जाता है, तब ComponentEvent Generate होता है।
- जब किसी Container में कोई Object Add किया जाता है या किसी Container से किसी Object को Delete किया जाता है, तब ContainerEvent Object Generate होता है।
- जब कोई Component Input के लिए Focus Receive करता है या जब किसी Component से Focus किसी दूसरे Component पर Move होता है, तब FocusEvent Object Generate होता है।
- सभी Input Component की Input Classes की InputEvent Class Super Class है। इसलिए किसी भी Input Object में Input करने पर ये Event Generate होता है।
- जब किसी List Box, Choice Box या Check Box से किसी Item को Select किया जाता है, तब ItemEvent Object Generate होता है।
- जब Keyboard से किसी Key को Press करके Input प्राप्त किया जाता है, तब KeyEvent Object Generate होता है।
- जब किसी Window से सम्बंधित Activities जैसे कि Window को Activate, Close, Deactivate, Deiconified, Iconified, Open, Restore, Minimize या Maximize आदि करने पर WindowEvent Object Generate होता है।
- जब Mouse को Click, Press, Release, Drag, या Move किया जाता है, तब MouseEvent Object Generate होता है।
- जब कोई Component Paint होता है, तब PaintEvent Object Generate होता है।
- जब किसी Text Component के Text को Modify किया जाता है, तब TextEvent Object Generate होता है।
- जब Mouse के Scroll Wheel को Move किया जाता है, तब MouseWheelEvent Generate होता है। ये Event केवल जावा के 4 व इसके बाद के Version में ही उपलब्ध है।
Event Listeners
Delegation Event Model को मुख्यतया दो भागों Source व Listeners में विभाजित किया गया है। किसी Event को Generate करने वाले विभिन्न प्रकार के Source Objects को Create करने वाली Classes को java.awt Package में Define किया गया है, जबकि जावा के java.awt.event Package में Define किए गए एक या एक से अधिक Interfaces को Implement करके Listeners Objects को Create किया जाता है।
Event Listener एक ऐसा Object होता है जो किसी Event के Generate होने पर Notify होता है। जब कोई Event Generate होता है, तब Event Generate करने वाला Source Object Listener में Define किए गए किसी Appropriate Method को Invoke करता है और उस Method में Argument के रूप में एक Event Object प्रदान करता है। किसी भी Event Listener की मुख्यत: दो Requirement होती हैं:
- इसे एक या एक से अधिक Source Objects के साथ Register किया जाए, ताकि ये उन Source Objects द्वारा Generate होने वाले Events से Notify हो सके और
- इन Notifications को प्राप्त करके उन्हें Process करने के लिए Methods Implement किए जाएं।
वे Methods जो Source Objects से Generate होने वाले Events को Receive व Process करते हैं, Interfaces के एक समूह के रूप में java.awt.event नाम के Package में Specify किए गए हैं। उदाहरण के लिए MouseMotionListener Interface में Mouse Move होने के Notifications को Receive करने के लिए दो Methods Define किए गए है और ये दोनों Methods तब Notification प्राप्त करते हैं जब Mouse को Drag या Move किया जाता है।
Mouse को Drag या Move करने पर Mouse Move Event Generate होता है और इस Event को Handle करने के लिए हमें MouseMotionListener Interface के दोनों Methods को Implement करना होता है। यदि किसी Class में इस Interface को Implement किया गया हो, तो उस Class का कोई भी Object इन दोनों में से किसी एक या दोनों Events को Receive करते हुए Notify हो सकता है। विभिन्न प्रकार के Events को Handle करने के लिए Common रूप से Use किए जाने वाले Interfaces व उनमें Define किए जाने वाले Methods को हम निम्न Description से समझ सकते हैं:
ActionListener Interface
इस Interface में actionPerformed() नाम का एक Method Define किया जाता है, जो कि Argument के रूप में किसी ActionEvent Object को Receive करता है। ये Method तब Invoke होता है, जब कोई ActionEvent Object Generate होता है और ये Object तब Generate होता है, जब किसी Command Button पर Click किया जाता है, या किसी Menu Item को Select किया जाता है या फिर किसी List Item को Double Click किया जाता है। इस Method का Syntax निम्नानुसार होता है:
void actionPerformed(ActionEvent actnEvnt)
AdjustmentListener Interface
इस Interface में adjustmentValueChanged() नाम के एक Method को Define किया जाता है, जो Argument के रूप में किसी AdjustmentEvent Object को Receive करता है। ये Method तब Invoke होता है जब कोई Adjustment Event Generate होता है। इस Method का General Syntax निम्नानुसार होता है:
void adjustmentValueChanged (AdjustmentEvent adjEvnt)
ComponentListener Interface
इस Interface में चार Method को Define किया जाता है, जो किसी Component की Hidden, Moved, Resized या Visible स्थिति को Identify करते हुए Execute होते हैं। इन Methods का General Syntax निम्नानुसार होता है:
void componentResized(ComponentEvent compEvnt)
void componentMoved(ComponentEvent compEvnt)
void componentShown(ComponentEvent compEvnt)
void componentHidden(ComponentEvent compEvnt)
ContainerListener Interface
इस Interface में दो Method को Define किया जाता है, जो Container में किसी Component Add होने या Container से किसी Component के Remove होने की स्थिति को Identify करते हुए Execute होते हैं।
यानी जब किसी Container में कोई Component Add किया जाता है, तब componentAdded() Method Execute होता है और जब किसी Container से कोई Component Remove किया जाता है, तब componentRemoved() Method Execute हो जाता है। इन Methods का General Syntax निम्नानुसार होता है:
void componentAdded(ContainerEvent contEvnt)
void componentRemoved(ContainerEvent contEvnt)
FocusListener Interface
इस Interface में दो Method को Define किया जाता है। ये Methods किसी Component के Keyboard Focus Receive करते समय व Focus को Lost करते समय Execute होते हैं, यानी जब कोई Component Keyboard का Focus Receive करता है, तब focusGained() Method Execute होता है और जब कोई Component Keyboard के Focus को Lost करता है, तब focusLost() Method Execute होता है। इन Methods का General Syntax निम्नानुसार होता है:
void focusGained(FocusEvent focusEvnt)
void focusLost(FocusEvent focusEvnt)
ItemListener Interface
इस Interface में एक Method को Define किया जाता है, जो किसी Component की उस स्थिति को Identify करता है, जब Component के किसी Item को Change किया जाता है। यानी किसी Component के किसी Item को Change करने पर इस Listener में Define किया गया itemState() नाम का Method Execute हो जाता है। इस Method का General Syntax निम्नानुसार होता है:
void itemState(ItemEvent itmEvnt)
KeyListener Interface
इस Interface में तीन Method को Define किया जाता है और ये तीनों Method तब Execute होते हैं, जब किसी Keyboard से कोई Key Press किया जाता है। जब कोई Key Press किया जाता है, तब keyPressed() Method Execute होता है। जब Key को Release किया जाता है, तब keyReleased() Method Invoke होता है और जब Keyboard से कोई Key Type किया जाता है, तब keyTyped() Method Invoke होता है।
उदाहरण के लिए जब Keyboard से कोई Key Press किया जाता है, तब Key Pressed, Key Typed व Key Released Events के क्रम में तीन Events Generate होते हैं। यदि User HOME Key को Press करके Release करता है, तो केवल दो Events Key Pressed व Key Released के क्रम में Generate होते हैं। इस Interface के तीनों Methods का General Syntax निम्नानुसार होता है:
void keyPressed(KeyEvent keyEvnt)
void keyReleased(KeyEvent keyEvnt)
void keyTyped(KeyEvent keyEvnt)
MouseListener Interface
इस Interface में पांच Methods को Define किया जाता है, जो Mouse के किसी Component पर Click होने, Component में Enter होने, Component से Exit होने, Component के Press होने और Component के Release होने को Identify करते हैं। यानी
- जब User Mouse के किसी Button को किसी Point पर Press करके उसी Point पर Release कर देता है, तो mouseClicked() Method Invoke होता है।
- जब Mouse Pointer किसी Component पर Enter होता है, तब mouseEntered() Method Invoke होता है।
- जब Mouse Pointer किसी Component से Exit होता है, तब mouseExited() Method Invoke होता है।
- जब Mouse के किसी Button को Press किया जाता है, तब mousePressed() Method Invoke होता है।
- जब Mouse के किसी Button को Release किया जाता है, तब mousePressed() Method Invoke होता है।
इन Methods का General Syntax निम्नानुसार होता है:
void mouseClicked(MouseEvent mousEvnt)
void mouseEntered(MouseEvent mousEvnt)
void mouseExited(MouseEvent mousEvnt)
void mousePressed(MouseEvent mousEvnt)
void mouseReleased(MouseEvent mousEvnt)
MouseMotionListener Interface
इस Interface में दो Method को Define किया जाता है। जब Mouse को Drag किया जाता है तब mouseDragged() Method Invoke होता है और जब Mouse को Move किया जाता है, तब mouseMoved() Method Invoke होता है। इन दोनों Methods का General Syntax निम्नानुसार होता है:
void mouseDragged(MouseEvent mousEvnt)
void mouseMoved(MouseEvent mousEvnt)
MouseWheelListener Interface
इस Interface में एक Method Define किया जाता है, जो तब Invoke होता है, जब Mouse के Wheel को घुमाया या Move किया जाता है। इस Method का General Form निम्नानुसार होता है:
void mouseWheelMoved(MouseEvent mousEvnt)
TextListener Interface
इस Interface में एक Method Define किया जाता है। जब किसी TextField या TextArea Object में Text को Change किया जाता है, तब textChanged() Method Invoke होता है। इस Method का General Syntax निम्नानुसार होता है:
void textChanged(TextEvent txtEvnt)
WindowFocusListener Interface
इस Interface में windowGainedFocus() व windowLostFocus() Methods को Define किया जाता है, जो क्रमश: Window के Focus प्राप्त करने व Lost करने पर Execute होते हैं। इनका General Syntax निम्नानुसार होता है:
void windowGainedFocus(WindowEvent wndEvnt)
void windowLostFocus(WindowEvent wndEvnt)
WindowListener Interface
इस Interface में सात Methods Define किए जाते हैं, जो Window के Activate होने, Close होने, Deactivate होने, Deiconified होने, Open होने, Iconified होने व Quit होने पर Execute होते हैं।
- जब कोई Window Activate होता है, तब windowActivated() Method Invoke होता है।
- जब कोई Window Deactivate होता है, तब windowDeactivated() Method Invoke होता है।
- जब कोई Window Iconified होता है, तब windowIconified() Method Invoke होता है।
- जब कोई Window Deiconified होता है, तब windowDeiconified() Method Invoke होता है।
- जब कोई Window Open होता है, तब windowOpend() Method Invoke होता है।
- जब कोई Window Close होता है, तब windowClosed() Method Invoke होता है।
- जब कोई Window Close हो रहा होता है, तब windowClosing() Method Invoke होता है।
इन सभी Methods के General Syntax निम्नानुसार होते हैं:
void windowActivated(WindowEvent wndEvnt)
void windowDeactivated(WindowEvent wndEvnt)
void windowIconified(WindowEvent wndEvnt)
void windowDeiconified(WindowEvent wndEvnt)
void windowOpend(WindowEvent wndEvnt)
void windowClosed(WindowEvent wndEvnt)
void windowClosing(WindowEvent wndEvnt)
ये Article इस वेबसाईट पर Selling हेतु उपलब्ध EBook Java in Hindi से लिया गया है। इसलिए यदि ये Article आपके लिए उपयोगी रहा, तो निश्चित रूप से ये पुस्तक भी आपके लिए काफी उपयोगी साबित होगी।
Java Programming Language in Hindi | Page: 682 | Format: PDF