Java GUI Programming

Java GUI Programming: अभी तक हमने जितने भी Applets Create किए हैं, उनमें से ज्यादातर में एक Text Box Object को ही Applet पर Add किया है। जिस तरह से हमने एक Text Box को Applet पर Add किया है, उसी तरह से हम विभिन्न प्रकार के अन्‍य User Interface Controls को भी Applet पर Display कर सकते हैं।

विभिन्न प्रकार के User Interface Controls की Classes को जावा के AWT नाम के Package में Define किया गया है। इसलिए Graphical User Interface Create करने के लिए हमें अलग से किसी और Package को अपने Program में Import करने की जरूरत नहीं होती है।

Java GUI Programming : Abstract Windowing Toolkit

चूंकि जावा एक Platform Independent Programming Language है, जो हमें एक से ज्यादा Platform पर Run होने वाले Applications बनाने की सुविधा प्रदान करता है, इसीलिए इसके Windowing Software का भी Flexible होना जरूरी था।

जावा के Windowing Classes के Package का नाम Abstract इसीलिए रखा गया है, क्योंकि जावा के इस Package में उन Classes का समूह है, जिनके प्रयोग द्वारा ऐसे GUI Software बनाए जाते हैं, जो Platform Independent होते हैं।

Platform Independent GUI Classes की जरूरत इसलिए होती है ताकि बनने वाले Software को World Wide Web पर Execute किया जा सके, जिसे विभिन्न प्रकार के लोग विभिन्न प्रकार के Computer System व विभिन्न प्रकार के Operating System पर विभिन्न प्रकार के Browsers का प्रयोग करके Use कर सकें।

जावा के इस Toolkit Package में हमें हर उस चीज की Class प्राप्त हो जाती है, जिसकी जरूरत किसी भी GUI Program को Create करने के लिए पड सकती है। जावा के इस Windowing Toolkit Package की Classes का प्रयोग करके हम Buttons, Check Boxes, Labels व अन्‍य Simple Components Create कर सकते हैं। साथ ही Text Fields, Dialog Boxes, Pull Down Menus, तथा और भी विभिन्न प्रकार के Components Create कर सकते हैं।

इस Toolkit में Font, Color व Graphics से सम्बंधित Classes भी हैं, जिनको हमने अपने पिछले कुछ Applet Programs में Use भी किया है। इनके अलावा इस Toolkit में Event Driven Programming से सम्बंधित विभिन्न प्रकार के Events को Handle करने से सम्बंधित Classes भी हैं, जिनका प्रयोग Program को Event Driven GUI Program बनाने के लिए किया जाता है।

Java GUI Programming : Components

किसी भी Windowing Programming Language में हमेंशा ActivePassive दो तरह के Controls होते हैं। Active Controls वे Controls होते हैं, जो हमेंशा किसी ना किसी Event को Response करते हैं और किसी ना किसी Event Handler को Trigger करते हैं। यदि सरल शब्दों में कहें, तो हम ये भी कह सकते हैं कि Active Controls हमेंशा किसी ना किसी प्रकार का Result या Output Generate करते हैं।

जबकि कुछ Controls ऐसे होते हैं, जो स्वयं किसी प्रकार का Output Generate नहीं करते हैं। लेकिन विभिन्न प्रकार के Active Controls अपना Output प्रदान कर सकें, इसके लिए उन Active Controls को अपना काम करने के लिए जगह प्रदान करते हैं।

इस तरह के Controls को Passive Controls या Containers कहते हैं। ये ऐसे Controls होते हैं, जिनमें अन्‍य Controls Place किए जाते हैं। कुछ Controls ऐसे भी होते हैं, जो Active Control का काम तो करते ही हैं, साथ ही Passive Control या Containers की तरह भी काम कर सकते हैं। Text Box व Check Box ऐसे ही दो Active Controls हैं, जो स्वयं तो Active Controls हैं ही] साथ ही इन्हें किसी अन्‍य Active Control के लिए Container की तरह ही Use किए जा सकता है।

किसी भी Container Control में हम जितने चाहें, उतने Controls को Place कर सकते हैं। यदि हम चाहें तो Container को Empty भी रख सकते हैं।

AWT Package में विभिन्न प्रकार के User Interface Controls को Components नाम की एक Class की विभिन्न Subclasses के रूप में Define किया गया है।

यानी Button Class, Checkbox Class आदि विभिन्न प्रकार के UI (User Interface) Controls को Component Class से Derive किया गया है। इसी Component Class से Container नाम की एक Class को भी Derive किया गया है। इस Container Class को आगे फिर से PanelWindow नाम की दो Subclasses में Derive किया गया है।

चूंकि Panel Class व Window Class दोनों Classes समान Parent Class Container से Derived हैं, इसलिए इन दोनों Classes को Sibling Classes भी कहते हैं। Panel Class एक ऐसा Container है, जिसके Objects का प्रयोग अन्‍य प्रकार के Active या Passive Objects को Hold करने के लिए तो किया जाता है, लेकिन इस Class के Objects दिखाई देने वाले User Interface Objects नहीं होते हैं।

इस Panel Class को आगे फिर से Derive करके जिस Class को Create किया गया है, उस Class का नाम Applet Class है। ये वही Applet Class है, जिसको Derive करके हमने अभी तक कई Applet Programs Create किए हैं। Applet Class के Programs वे GUI Programs होते हैं, जो Web Pages में Run होते हैं।

Panel Class की Sibling Class यानी Window Class से भी FrameDialog नाम की दो Subclasses Create की गई हैं। Frame Class एक ऐसी Class है, जिसके Object एक दिखाई देने वाले Window के Frame को Represent करते हैं।

यानी यदि हम Frame Class का कोई Object Create करते हैं, तो हमें Screen पर एक Rectangular Area मिलता है, जिसमें एक Title Bar होता है और Frame के Title Bar पर ही Frame को Resize करने के लिए Restore, Minimize, Maximize तथा Frame Window को Close करने के लिए Close Control Buttons मिलते हैं।

Frame Class की तरह ही हम Dialog Class से भी Objects Create कर सकते हैं। जब हम Dialog Class का कोई Object Create करते हैं, तब हमें Screen पर एक Dialog Box मिलता है। Dialog Box भी एक तरह का Frame Window ही होता है, लेकिन इस पर Menu Bar नहीं होता है, तथा हम इसे Resize नहीं कर सकते हैं।

इस तरह से हमें Component Class से तीन तरह के Containers Applet, Window व Frame प्राप्त होते हैं व Window से दो और Containers Frame व Dialog भी प्राप्त होते हैं। यानी यदि हम सारांश देखें तो हम कह सकते हैं कि जावा में हमें पांच तरह के Containers मिलते हैं, जिनमें से केवल Panel ही एक ऐसा Container होता है, जो Visually दिखाई नहीं देता है।

Java GUI Programming : Panel Class

ये एक बहुत ही महत्वपूर्ण Container Class है, क्योंकि इस Class के Objects Screen पर Invisible रहते हैं, लेकिन किसी Applet Container या किसी Application के Window या Frame Container पर विभिन्न प्रकार के अन्‍य Active या Passive Controls को Organize करने के लिए इस Class के Objects महत्वपूर्ण भूमिका निभाते हैं।

Panel Class के Objects द्वारा हम विभिन्न प्रकार के अन्‍य Objects की Applet या Application के Frame Container पर Location व Size तय कर सकते हैं। Panel Class का Object Create करने का तरीका भी विभिन्न प्रकार के अन्‍य Objects Create करने के समान ही है। यानी हम निम्नानुसार Statement द्वारा Panel Control Create कर सकते हैं:

        Panel newPanel = new Panel();

एक बार Panel Create करने के बाद उसे भी अन्‍य Objects की तरह ही किसी Window, Frame या Applet पर Add किया जाता है। Panel को इन Containers पर Add करने के लिए हमें Container Class के add() Method को Use करना होता है। यानी यदि हम Applet के सम्बंध में कहें तो Applet के init() Method में हमें निम्नानुसार Statement लिख कर Panel Object newPanel को Applet में Add करना होता है:

   add(newPanel);

हम एक Panel के अन्दर दूसरा Panel भी Nest कर सकते हैं साथ ही हम एक Panel में एक से ज्यादा Sub – Panels को Nested कर सकते हैं। इसके अलावा हम एक Nested Panel में फिर से एक या अधिक Sub – Panels को Nest कर सकते हैं। यानी हम जितने Level तक चाहें, उतने Levels तक Panels की Nesting कर सकते हैं।

उदाहरण के लिए निम्न Statements में हमने तीन Levels तक Panels की Nesting की है:

	Panel mainPanel, subPanel, subSubPanel;
	mainPanel = new Panel();
	subPanel = new Panel();
	subSubPanel = new Panel();

	mainPanel.add(subPanel);
	subPanel.add(subSubPanel);

Java GUI Programming : Push Button Control

किसी भी GUI Application में Push Buttons हमेंशा किसी ना किसी Event Handler को Trigger करने का काम करता है। यानी Push Button एक ऐसा Component या Control होता है, जो किसी Event Driven GUI Program में किसी Event के Generate होने पर Event को Handle करने के लिए लिखे गए Event Handler Method को Execute करने का काम करता है।

सामान्‍यतया सभी Objects किसी ना किसी प्रकार के Event के Response में ही कुछ ना कुछ काम करते हैं, लेकिन Push Button तो हमेंशा किसी ना किसी Event Handler को Trigger करने का काम ही करता है।

अभी तक हमने केवल TextField को ही अपने Applet पर Add किया है। जिस तरह से हमने TextField Component को अपने Applet पर Add किया है, उसी तरह से हम विभिन्न प्रकार के अन्‍य Basic User Interface Controls को भी अपने Applet पर Add कर सकते हैं।

अन्‍य प्रकार के Components को अपने Applet पर Add करने के लिए हमें वही तरीका Use करना पडता है, जिस तरीके का प्रयोग करके एक TextField Component को Applet पर Place किया जाता है।

यानी सबसे पहले हमें Required Component की Class का एक Object Declare करना होता है। फिर उस Object को new Operator का प्रयोग करके Memory Allocate करना होता है तथा Object को कुछ वांछित मानों से Initialize करना होता है, और अन्त में हमें उस Object को add() Method का प्रयोग करके Applet पर Place करना होता है।

निम्न Applet Program में हमने दो Text Field Objects व एक Button Objects को Applet पर Add किया है। इस Applet Program में हम देख सकते हैं कि Applet में Button Add करने के लिए भी हमने वही Process Use किया है, जिस Process का प्रयोग करके हमने एक TextField Object को Applet पर Add किया है।

	// File Name: ButtonNTextBoxApplet.java
	import java.awt.*;
	import java.applet.*;
	
	public class ButtonNTextBoxApplet extends Applet
	{
	TextField txtBox1 = new TextField(20);
	TextField txtBox2 = new TextField(20);
	Button OKButton = new Button("OK");
	
		public void init()
		{
			add(txtBox1);
			add(txtBox2);
			add(OKButton);
		}
	}
Java GUI Programming

इस Output में हम देख सकते हैं, कि दोनों Text Box व Button उसी क्रम में दिखाई दे रहे हैं, जिस क्रम में इन्हें init() Method में Applet पर Add किया गया है। Applet में Button को Add करने के लिए हमने निम्न Statements का प्रयोग किया है:

Button OKButton = new Button(“OK”);
add(OKButton);

हम देख सकते हैं कि OKButton Object को Create करते समय हमने Button Class के Constructor में जो String “OK” लिखा है, वह String Button के नाम के रूप में हमें दिखाई देता है। इस String को ज्यादातर GUI Programming Languages में Button का “Caption” कहा जाता है। Program के Runtime में यदि हम किसी Button के Caption को प्राप्त करना चाहें, तो हमें getLabel() Method का प्रयोग करना पडता है।

इस Method का प्रयोग करने पर ये Method हमें उस Object के Label String को Return करता है, जिसका Reference Method में दिया गया होता है। इस Return होने वाली String को प्राप्त करने के लिए हमें String प्रकार का एक Object Create करना होता है। यानी यदि हमें OKButton के Caption को प्राप्त करना हो, तो हमें निम्नानुसार Statements लिखने होंगे:

String captionOfButton;
captionOfButton = OKButton.getLabel();

इसी तरह से यदि हमें Program के Runtime में किसी Push Button के Caption को Change करना चाहें, तो हमें Button Class के setLabel() Method को Use करना होता है और इस Method में Argument के रूप में वह String देना होता है, जिसे हम Caption के रूप में Push Button पर Display करवाना चाहते हैं। ये काम करने के लिए हमें निम्नानुसार Statement का प्रयोग करना होता है:

OKButton.setLabel(“Cancel”);

Push Button के इस Behavior को हम निम्नानुसार एक Applet Program बना कर भी समझ सकते हैं, जिसमें User Push Button पर जब Click करता है, तब Push Button का Caption हर बार Click करने पर Change होता है:

	// File Name: ButtonCaptionApplet.java
	import java.awt.*;
	import java.applet.*;
	
	public class ButtonCaptionApplet extends Applet
	{
	Button OKButton = new Button("   OK   ");
	
		public void init()
		{
			add(OKButton);
		}
		
		public void paint(Graphics g)
		{
			String caption = OKButton.getLabel();
	
			if(caption == "   OK   ")
				OKButton.setLabel("Cancel");
			else
				OKButton.setLabel("   OK   ");
		}
	
		public boolean action(Event evnt, Object obj)
		{
			repaint();
			return true;
		}
	}
Java GUI Programming - Button

Java GUI Programming : Label Control

अभी तक हमने Applet पर जो भी String Display किया है, उसे एक Graphics के रूप में Display करने के लिए Graphics Class के drawString() Method का प्रयोग करके Display किया है। लेकिन सभी GUI Languages में किसी Static Text को Window पर Display करने के लिए हमेंशा एक विशेष प्रकार का Control होता है। जावा में इस Static Text Display करने वाले Control को Label कहा जाता है। Label Object का प्रयोग सामान्‍यतया User को Message देने के लिए किया जाता है।

हम ये भी कह सकते हैं कि drawString() Method जो काम करता है, वही काम एक Label Object करता है। Label Object कभी भी कोई Action Event Generate नहीं करता है। Label Object में दिखाई देने वाले Text को Program के Runtime में प्राप्त करने के लिए हमें getText() Method का प्रयोग करना पडता है।

जबकि Program के Runtime में Label Object में दिखाई देने वाले Text को Change करने के लिए हमें setText() Method का प्रयोग करना पडता है। getText() Method वही काम करता है, जो काम Button Object के लिए getLabel() Method करता है और Label Object के लिए setText() Method वही काम करता है, जो काम Button Object के लिए setLabel() Method करता है।

पिछले Program में ही थोडा सा परिवर्तन करके हम इस Control के Effect को भी देख सकते हैं। Modified Program निम्नानुसार है:

	// File Name: LabelApplet.java
	import java.awt.*;
	import java.applet.*;
	
	public class LabelApplet extends Applet
	{
	Button OKButton = new Button("   OK   ");
	Label lblCaption = new Label("   OK   ");
	
		public void init()
		{
			add(OKButton);
		}
		
		public void paint(Graphics g)
		{
			String caption = lblCaption.getText();
			OKButton.setLabel(caption);
			
			if(caption == "   OK   ")
				lblCaption.setText("Cancel");
			else
				lblCaption.setText("   OK   ");
		}
	
		public boolean action(Event evnt, Object obj)
		{
			repaint();
			return true;
		}
	}
Java GUI Programming - Button

यदि हम इस Applet को भी Run करें, तो हमें पिछले Program जैसा ही Output प्राप्त होता है। लेकिन इस बार Use होने वाले Methods OK Button Class के नहीं हैं, बल्कि Label Class के हैं। अगले Applet Program में हमने तीन Text Boxes, तीन Label Controls व एक Command Button Object को Applet पर Place किया है। Applet Program निम्नानुसार है:

	// File Name: ThreeControlApplet.java
	import java.awt.*;
	import java.applet.*;
	
	public class ThreeControlApplet extends Applet
	{
		TextField txtBox1 = new TextField(10);
		TextField txtBox2 = new TextField(10);
		TextField txtTotal = new TextField(10);
		
		Label lblLabel1 = new Label("First Value");
		Label lblLabel2 = new Label("Second Value");
		Label lblTotal = new Label("Total");
		
		Button OKButton = new Button("Calculate");
	
		public void init()
		{
			add(lblLabel1);
			add(txtBox1);
			add(lblLabel2);
			add(txtBox2);
			add(lblTotal);
			add(txtTotal);
			add(OKButton);
		}
	}
Java GUI Programming - TextBox with Button

किसी Applet पर विभिन्न Controls को जिस क्रम में add() Method का प्रयोग करके Add किया जाता है, वे Controls Applet पर उसी क्रम में Display होते हैं। यानी हम init() Method में जिस क्रम में विभिन्न Controls को Applet पर Add करते हैं, उसी क्रम में वे Controls Applet पर दिखाई देते हैं। साथ ही सभी Controls Applet के Center में ही Display होते हैं।

यदि दिखाई देने वाले सभी Controls पहली Line में Display नहीं हो पाते हैं, तो स्वयं ही Automatically वे दूसरी Line में Shift हो जाते हैं। यदि हम Applet को Maximize] Restore या Resize करते हैं, तो विभिन्न Controls की Position भी Change होती है। यदि हम इसी Program के init() Method में परिवर्तन करके Program को निम्नानुसार Modify करें, तो हमें अग्रानुसार Applet प्राप्त होता है:

	// File Name: ModifiedThreeControlApplet.java
	import java.awt.*;
	import java.applet.*;
	
	public class ModifiedThreeControlApplet extends Applet
	{
		TextField txtBox1 = new TextField(10);
		TextField txtBox2 = new TextField(10);
		TextField txtTotal = new TextField(10);
		
		Label lblLabel1 = new Label("First Value");
		Label lblLabel2 = new Label("Second Value");
		Label lblTotal = new Label("Total");
		
		Button OKButton = new Button("Calculate");
	
		public void init()
		{
			add(lblLabel1);
			add(lblLabel2);
			add(lblTotal);
	
			add(txtBox1);
			add(txtBox2);
			add(txtTotal);
	
			add(OKButton);
		}
	}
Java GUI Programming with Layout

यानी किसी भी जावा Applet या Application में दिखाई देने वाले विभिन्न प्रकार के Visual Components का Layout हमें ही तय करना होता है। यदि हम इस Layout को Specify नहीं करते हैं, तो जावा स्वयं ही Automatic Layout Set करके विभिन्न Controls को Applet पर Add करता है। जावा जिस Default Layout का प्रयोग विभिन्न प्रकार के Controls को Applet पर Place करने के लिए करता है, उस Layout को Flow Layout कहते हैं।

जावा में विभिन्न प्रकार के Controls की Size व Location को तय करने के लिए कुछ विशेष प्रकार की Classes प्रदान की गई हैं। इन Classes का मुख्‍य काम Applet या Application पर दिखाई देने वाले विभिन्न प्रकार के की Location व Size तय करना ही होता है।

जावा की इन Classes को Layout Manager Classes कहते हैं। चूंकि जावा एक Platform Independent Language है, इसलिए इसके Programs विभिन्न प्रकार के Hardware व Operating Systems पर Run होते हैं।

जबकि विभिन्न प्रकार के Hardware व Operating Systems अलग-अलग प्रकार के Coordinate System व Display Device Driver का प्रयोग करते है। इस स्थिति में जिस Platform पर कोई Application बनाया जाता है, वह Application दूसरे Platform पर भी उसी प्रकार का दिखाई देगा, ये निश्चित नहीं होता है।

लेकिन चूंकि जावा एक Platform Independent Programming Language है, इसलिए इसमें Develop किए जाने वाले Program सभी Platforms पर समान ही दिखाई देने चाहिए। जावा में इस विशेषता को प्राप्त करने के लिए Layout Manager Concept को Use किया गया है।

Layout Manager Class के Objects द्वारा जब हम कोई GUI Program Develop करते हैं, तो इस Class के Objects स्वयं ही सभी Platforms पर Adjust हो जाते हैं, जिससे हमें सभी प्रकार के Platforms पर जावा के Programs समान ही दिखाई देते हैं। इस Automatically Adjust होने वाले Programs Develop करने के लिए हमें Layout Managers का प्रयोग करना जरूरी हो जाता है।

कई बार हमें ऐसे Programs बनाने होते हैं जो किसी एक ही Platform के लिए होते हैं। ऐसे Programs Adjustable नहीं होते हैं। यानी कई बार हमें ऐसे Programs बनाने की जरूरत होती] जिसके Window पर Placed विभिन्न GUI Objects Window की Size Change होने के बावजूद भी अपनी Position व Size को Change नहीं करते हैं। जब हमें ऐसे Programs बनाने होते हैं, तब हमें Layout Managers को Use करने की जरूरत नहीं होती है। उस स्थिति में हम विभिन्न प्रकार के Graphical Objects को Applet या Application Window में उनकी Absolute Position पर Place करना होता है।

चूंकि किसी भी Applet या Frame Window में हमेंशा Flow Layout नाम का Default Layout Manager Active रहता है, इसलिए जब हमें Absolute Position पर GUI Objects को Place करना होता है, तब हमें इस Layout Manager को Terminate करना जरूरी होता है।

इसे Terminate किए बिना हम Absolute Position पर GUI Objects को Place नहीं कर सकते हैं। इस Default Layout Manager को Terminate करने के लिए हमें Applet के init() Method में निम्न Statement का प्रयोग करना होता है:

      setLayout(null);

Java GUI Programming : Rectangles and Windows

GUI Programming में Rectangles का बहुत उपयोग होता है। लगभग सभी GUI Objects को Represent करने के लिए Rectangles का प्रयोग Directly या Indirectly होता ही है। Computer में हम जितने भी Window देखते हैं, वे सभी Rectangle Form में ही होते हैं।

यहां तक कि एक Circle को भी Rectangle Form में ही Display किया जाता है। इसी तरह से किसी GUI Application में हम जितने भी GUI Objects देखते हैं, वे सभी Objects Window ही होते हैं। कुछ Window ऐसे होते हैं, जो किसी दूसरे Window को Contain करने का काम करते हैं। ऐसे Windows को Containers कहते हैं, जबकि कुछ Window ऐसे होते हैं, जो स्वं; Active होते हैं। Button, Menu Bar Options, Option Buttons, Status Bar, Toolbar आदि सभी Windows ही हैं और सभी Windows Rectangle ही होते हैं।

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