2 D Drawing

2 D Drawing: हमें लगभग सभी Applets में थोडा बहुत Graphics Programming तो करना ही पडता है, फिर चाहे हम Texts की एक Line Applet पर Display करने के लिए Graphics Programming का प्रयोग करें या फिर चाहे Animation के रूप में Graphics की एक Sequence Display करें।

क्योंकि Windows एक GUI System है, इसलिए हमें Screen पर जो कुछ भी दिखाई देता है, वह सबकुछ Graphically ही दिखाई देता है। यही बात Texts के सम्बंध में भी Apply होती है। यानी Windows या GUI Mode में हमें Screen पर जो Texts भी दिखाई देते हैं, वे Texts भी वास्तव में Graphics ही होते हैं।

Applet Canvas for 2 D Drawing

किसी Applet का जो हिस्सा हमें Screen पर दिखाई देता है, Applet के उस हिस्से को Canvas कहते हैं, जिसमें Applet विभिन्न प्रकार की Information यानी Texts व Graphics को Display करता है। Applet के Canvas की Size Applet की Size पर निर्भर होती है। यानी Applet जितना बडा होगा, Applet का Canvas भी उतना ही बडा होगा।

Applet की Size HTML Document के <APPLET> Tag द्वारा Specify किया जाता है। हम जो कुछ भी Applet में Draw करते हैं, हमें उस Applet में उतनी ही Drawings दिखाई देती है, जितनी Canvas पर होती है। Applet का जो Area Canvas से बाहर होता है, वह Area हमें दिखाई नहीं देता है। उदाहरण के लिए निम्न Applet देखिए, जिसमें एक Text String को Display किया गया है:

2 D Drawing - String

इस Applet में जितनी Screen दिखाई दे रही है, वह Screen ही Applet का Canvas है, जबकि Applet की Size तो इससे ज्यादा भी हो सकती है। यानी Applet की Actual Size निम्नानुसार पूरी Text String को Display कर सकती है:

2 D Drawing - String

हम Canvas पर जो भी Graphical Images Draw करते हैं, उनकी Position को Pixel Locations Coordinate System के आधार पर Applet पर Identify करते हैं। Screen पर हमें जो भी Graphics दिखाई देता है, वह Monitor पर चमकने वाले Picture Elements होते हैं, जो एक व्‍यवस्थित क्रम में चमकते हैं और हमें कोई ना कोई Graphics दिखाई देता है।

हमें हमारे किसी Specific Graphics को Applet के किस Pixel Location से Draw करना है, इस Pixel Location को तय करने का एक तरीका होता है, जिसे Pixel Coordinate System कहते हैं। Windows Operation System विभिन्न प्रकार के कई Mapping Modes को Support करता है। ये Mapping Modes ही ये तय करते हैं, कि किसी Application या Applet Window के लिए Coordinates किस प्रकार से Calculate होंगे।

किसी प्रकार के भी Confusion से बचने के लिए जावा में केवल एक ही Coordinate System को मान्‍यता प्रदान किया गया है। इस Coordinate System में किसी Application या Applet Window के Upper Left Corner का मान (0,0) होता है और X-Axis का मान Window के Right की तरफ बढता है तथा Y-Axis का मान Window के नीचे की तरफ बढता है।

जावा में हम जिस किसी भी Window में Drawing करते हैं, उसी Window के Upper Left Corner का मान (0,0) माना जाता है, फिर चाहे हमारा Window कोई Applet हो या फिर कोई Application हो। साथ ही इससे भी कोई अन्तर नहीं पडता है कि हमने हमारे Window को Screen पर किस Position पर Place किया है। Applet के Coordinate का Screen के Coordinate से कोई सम्बंध नहीं होता है।

Colors in 2 D Drawing

जावा में हम विभिन्न प्रकार के Colors में विभिन्न प्रकार के Graphics व Texts को Draw कर सकते हैं। जावा में RGB Mode में विभिन्न Colors को प्राप्त किया जा सकता है और कुछ Standard Color Constants का प्रयोग भी किया जा सकता है। जावा में हर Color को Red, Green व Blue Components द्वारा Define किया जाता है।

ये तीनों Components एक Integer प्रकार के मान द्वारा Represent होते हैं और इनका मान 0 से 255 के बीच कुछ भी तय किया जा सकता है। एक RGB Value को एक 32-Bit Integer में Store किया जा सकता है, जिसमें 31 से 24 तक के High Order Bits Unused रहते हैं, 23 से 16 तक के Bits द्वारा Red Color Represent होता है, 15 से 8 तक के Bits द्वारा Green Color Represent होता है और 7 से 0 तक के Low Order Bits द्वारा Blue Color को Represent किया जाता है।

जावा में विभिन्न प्रकार के Colors को किस प्रकार से बनाया जा सकता है और किस प्रकार से Colors में विभिन्न प्रकार के Special Effects ला, जा सकते हैं, इन सब के बारे में आगे विस्तार से समझेंगे। लेकिन यदि हमें General Colors के साथ ही काम करना हो, तो जावा में कुछ Color Constants को Define किया गया है। इन Constants का प्रयोग करके भी हम किसी Color को Set कर सकते हैं। ये Constants निम्नानुसार हैं:

black, 		BLACK, 		blue, 		BLUE, 		cyan, 		CYAN, 
darkGray,	DARK_GRAY, 	gray, 		GRAY, 		green, 		GREEN, 
lightGray, 	LIGNT_GRAY, magenta, 	MAGENTA, 	orange, 	ORANGE, 
pink, 		PINK, 		red, 		RED, 		white, 		WHITE, 
yellow, 	YELLOW

इन Color Constants को हम हमारी Coding में Color Set करने के लिए Directly Use कर सकते हैं। यदि हम Applet के Background व Foreground Color को Set करना चाहें, तो हमें setBackground() व setForeground() Method का प्रयोग करना पडता है। मानलो कि हमें हमारे Applet के Background का Color Blue व Foreground का Color White चाहिए, तो इसके लिए हमें Applet के init() Method में निम्नानुसार Statement लिखना होगा:

setBackground(Color.blue);
setForeground(Color.WHITE);

यदि हमें किसी Particular Object के लिए किसी नए Color को Set करना हो तो हमें Graphics Class के setColor() Method को Use करना होता है। मानलो कि हमें हमारे Applet में Blue Color में एक Message Display करना है। इस स्थिति में हमें Default Black Color के स्थान पर Blue Color को Set करना होगा। ये काम करने के लिए हम setColor() Method को निम्नानुसार Use कर सकते हैं, जहां g Graphics Class का एक Object है:

g.setColor(Color.BLUE);

जब हम किसी Color को Set कर देते हैं, तो वह Color जिस स्थान पर Set किया जाता है, उस स्थान से आगे के सभी Statements के लिए वह Color Set हो जाता है। इसलिए यदि हमें किसी एक Object के लिए ही Color को Set करना हो, तो Object को Draw करने के बाद उस पिछले Color को फिर से Set करना जरूरी होता है।

कई बार हमें System के Current Graphical Attributes के बारे में जानने की जरूरत पडती है। इस Information को प्रदान करने के लिए भी जावा में getColor(), getFont() व getFontMetrics() नाम के तीन Methods हैं। इनके बारे में हम आगे विस्तार से पढेंगे।

2 D Drawing Shapes

जावा की Graphics Class में विभिन्न प्रकार के Graphical Objects को Draw करने के लिए ढेर सारे Predefined Methods उपलब्ध हैं, जिनका प्रयोग करके हम विभिन्न प्रकार के Objects Draw कर सकते हैं। Applet में विभिन्न प्रकार के Shapes को paint() Method में Draw किया जाता है।

पिछले Programs में हमने paint() Method में Argument के रूप में एक Graphics Object Create किया है। Graphics Class AWT Package का एक हिस्सा है। इसलिए यदि हम हमारे Program में Graphics Create करना चाहते हैं, तो हमें awt Package के Graphics Class को अपने Program में Import करना जरूरी होता है। ये काम हम निम्नानुसार Syntax द्वारा कर सकते हैं:

      import java.awt.Graphics;

चूंकि यदि हम हमारे Program में awt Package के केवल Graphics Class को ही Import करना चाहते हैं, तो हमें उपरोक्त Syntax Use करना होता है, लेकिन यदि हम चाहते हैं कि हमारे Program में awt Package की सभी Classes Import हो जाएं] तो हमें निम्नानुसार Syntax लिखना होता है,

      import java.awt.*;

किसी Applet या GUI Application में यदि हम किसी Shape को Draw करना चाहते हैं, तो हमें केवल Appropriate Method को ही Call करना होता है और उसमें Method के लिए Required Arguments को Pass करना होता है। Methods में Pass किए जाने वाले Arguments उन Coordinates को Represent करते हैं, जहां पर हमें Shape को Draw करना है।

Drawing Line and Rectangles

Graphics Class में यदि सबसे सरल कोई Shape है, तो वह Line है। Line Draw करने के लिए हमें जावा की Graphics Class के drawLine() Method को Use करना होता है। इस Method में हमें Argument के रूप में चार Integer मान प्रदान करने पडते हैं। ये चार मान जोडे के रूप में होते हैं जो Line के Starting Point (x1, y1) व Ending Point (x2, y2) को Represent करते हैं।

उदाहरण के लिए यदि हम Coordinate (0,0) से (12,30) तक कोई Line Draw करना चाहते हैं, तो हमें drawLine() Method को Call करके किसी Graphics Object g के Reference में निम्नानुसार Arguments Pass करने होते हैं, जहां g वह Graphics Object हैं, जिसे paint() Method में Pass किया जाता है।

      g.drawLine( 0, 0,  12, 30 );

इसी तरह से कोई Rectangle Create करने के लिए हमें drawRect() Method को Graphics Object g के साथ Call करना होता है। इस Method में भी हमें चार ही Argument Pass करने होते हैं, लेकिन इस बार चारों Arguments के Meaning बदल जाते हैं। इस Method में पहले दो Arguments Rectangle के Upper-Left Corner को Represent करते हैं। तीसरा Argument Rectangle की Width को तथा चौथा Argument Rectangle की Height को Represent करता है।

यानी यदि हम चारों Arguments को (10, 20, 30, 40) लिखते हैं, तो (10, 20) Rectangle के Upper Left Corner को Represent करता है। तीसरा Argument 30 Rectangle के Width को तथा चौथा Argument Rectangle की Height को Represent करता है। इसे हम निम्न चित्र द्वारा समझ सकते हैं।

2 D Drawing - Rectangle

यदि हमें किसी Solid Color से Filled Rectangle Create करने की जरूरत हो, तो हमें drawRect() Method के स्थान पर fillRect() Method को Call करना होता है। इन दोनों Method के Arguments में किसी प्रकार का कोई अन्तर नहीं होता है, अन्तर केवल इनके नाम में व इनके काम करने के तरीके में ही है। यानी हम इस Method को भी निम्नानुसार Call कर सकते हैं:

      g.fillRect(10, 20, 30, 40);

यदि हम ऐसा Rectangle Create करना चाहें, जिसके Corners Rounded हों] तो हमें drawRoundRect() व fillRoundRect() Methods को Call करना होता है। इन Methods में Rectangle के चार Arguments तो समान ही होते हैं, इसके अलावा दो Arguments और होते हैं, जो Rectangle के Corners की Rounding Limit तय करते हैं। यानी हम इन Methods को निम्नानुसार Call कर सकते है:

g.drawRoundRect(10, 20, 30, 40, 10, 10);
g.fillRoundRect(10, 20, 30, 40, 5, 5);

Drawing Circles and Ellipses

Graphics Class में Circles व Ellipse को Draw करने के लिए अलग से कोई Method नहीं हैं। हमें Circles व Ellipses को Draw करने के लिए drawOval() Method का ही प्रयोग करना होता है।

यानी हम इस Method में Arguments के मानों में परिवर्तन करके Circles, Ellipses व Oval तीनों ही प्रकार के Shapes Create कर सकते हैं। Ovals Rectangles की तरह ही होते हैं। हम इन्हें Rounded Corner Rectangles ही मान सकते हैं। drawOval() Method में भी हमें drawRect() Method की तरह ही चार Arguments Pass करने होते हैं।

यदि हम Oval के Height व Width दोनों की Size समान रखते हैं, तो बनने वाला Shape Circle होता है। यदि हम Oval, Circle या Ellipse को अलग Color से Fill करना चाहते हैं, तो हमें setColor() Method द्वारा वांछित Color Set करना होता है और उसके बाद drawOval() Method के स्थान पर fillOval() Method को Call करना पडता है।

Drawing Arcs

Arc Oval का ही एक हिस्सा होता है। वास्तव में किसी Oval को कई Arcs की एक लगातार श्र`ंखला के रूप में भी Represent किया जा सकता है, जो कि आपस में Connected रहते हैं। drawArc() Method 6 Arguments लेता है।

पहले चार Arguments Oval की तरह ही Arc की Height व Width को Specify करने के लिए होते हैं। पांचवा Argument Arc के Starting Angle के मान को तय करता है, जबकि अन्तिम Argument Degree, Slop या Sweep Angle को Represent करता है।

Arcs को Draw करते समय वास्तव में जावा पहले एक Oval ही Create करता है, उसके बाद अन्तिम दो Arguments के रूप में दिए गए मान के आधार पर Oval को Arc के रूप में Change कर देता है। Arcs को Clockwise व Anti-Clockwise दोनों तरह से Represent किया जा सकता है।

Drawing Polygons

Polygons कई भुजाओं वाले Shapes होते हैं। Polygons को हम कई Connected Lines का एक समूह कह सकते हैं, जहां पहली Line के अन्त से दूसरी Line जुड जाती है, दूसरी Line के अन्त से तीसरी Line व अन्तिम Line का अन्त वापस से पहली Line के Starting Point पर होता है। यानी हम ये भी कह सकते हैं कि यदि हमें Polygon बनाना हो, तो हम drawLine() Method को n बार Use करके n भुजाओं वाला Polygon Create कर सकते हैं।

उदाहरण के लिए निम्न paint() Method Applet पर एक Polygon Draw करता है, लेकिन इसमें हमने केवल drawLine() Method का प्रयोग करके ही Line को Draw किया है।

	public void paint(Graphics g)
	{
		g.drawLine(50,50, 190,90);
		g.drawLine(190,90, 230, 190);
		g.drawLine(230,190, 50,50);
	}

Polygon बनाने के लिए हमें drawPolygon() Method Use करना होता है। इस Method में तीन Arguments Pass किए जाते हैं। पहले दो Arguments दो Integer प्रकार के Array होते हैं। जबकि तीसरा Argument कुल भुजाओं की संख्‍या को Represent करता है।

यदि हम उपरोक्त Polygon को drawPolygon() Method से Draw करें, जिसे कि हमने drawLine() Method से Create किया है, तो ये काम करने के लिए हमें paint() Method को निम्नानुसार लिखना पडेगा:

	public void paint(Graphics g)
	{
		int xPoints [] = {50,190, 230, 50};
		int yPoints [] = {50, 90, 190, 50};
		int nPoints = xPoints.length;
	
		g.drawPolygon(xPoints, yPoints, nPoints);
	}

पिछले paint() Method को देखें तो हम समझ सकते हैं, कि Line के Starting व Ending Points Horizontally (X,Y) के Combinations हैं, जबकि इस paint() Method में वे ही Points Vertically Assembled हैं तथा Starting व Ending Points केवल एक ही बार Use किए गए हैं। किसी भी Polygon के xPoints व yPoints दोनों Arrays की Size हमेंशा समान होती है और किसी Array की Size ज्ञात करने के लिए हम length() Method का प्रयोग कर सकते हैं।

	// File Name: AllGraphicsShapesApplet.java 
	
	import java.awt.*;
	import java.applet.*;
	
	public class AllGraphicsShapesApplet extends Applet
	{
	TextField txtShape = new TextField("0");
	
	int intShapeChoice;
	
		public void init()
		{
			add(txtShape);
		}
	
		public void paint(Graphics g)
		{
			g.drawString(" 1. For Line", 10, 60);
			g.drawString(" 2. For Rectangle", 250, 60);
			g.drawString(" 3. For Filled Rectangle", 10, 80);
			g.drawString(" 4. For Rounded Rectangle", 250, 80);
			g.drawString(" 5. For Filled Rounded Rectangle", 10, 100);
			g.drawString(" 6. For Oval", 250, 100);
			g.drawString(" 7. For Filled Oval", 10, 120);
			g.drawString(" 8. For Arc", 250, 120);
			g.drawString(" 9. For Filled Arc", 10, 140);
			g.drawString("10. For Polygon", 250, 140);
			g.drawString("11. For Filled Polygon", 10, 160);
	
			String shapeChoice = txtShape.getText();
	
			try
			{
				intShapeChoice = Integer.parseInt(shapeChoice);
	
				if(intShapeChoice < 1 || intShapeChoice > 12)
				g.drawString("Enter a Valid Shape Number between 1 to 11",260,40);
	
				else
				{
					if(intShapeChoice == 1)
					{
						setBackground(Color.blue);
						g.setColor(Color.white);
						g.drawLine(10,340, 400 , 340);
					}
	
					else if(intShapeChoice == 2)
					{
						setBackground(Color.cyan);
						g.setColor(Color.red);
						g.drawRect(10,340, 400 ,50);
					}
	
					else if(intShapeChoice == 3)
					{
						setBackground(Color.darkGray);	
						g.setColor(Color.green);
						g.fillRect(10,340, 400 ,50);
					}
	
					else if(intShapeChoice == 4)
					{				
						setBackground(Color.gray);
						g.setColor(Color.yellow);
						g.drawRoundRect(10, 340, 400 ,50, 45, 45);
					}
	
					else if(intShapeChoice == 5)
					{
						setBackground(Color.green);
						g.setColor(Color.yellow);
						g.fillRoundRect(10,340, 400, 50, 30, 30);
					}
					
					else if(intShapeChoice == 6)
					{
						setBackground(Color.lightGray);
						g.setColor(Color.red);
						g.drawOval(20, 340, 200, 120);
					}
	
					else if(intShapeChoice == 7)
					{
						setBackground(Color.magenta);
						g.setColor(Color.green);
						g.fillOval(20, 340, 200, 120);
					}
	
					else if(intShapeChoice == 8)
					{
						setBackground(Color.orange);
						g.setColor(Color.white);
						g.drawArc(20, 340, 200, 120, 45, 45);
					}
	
					else if(intShapeChoice == 9)
					{
						setBackground(Color.pink);
						g.setColor(Color.blue);
						g.fillArc(20, 340, 200, 120, 45, 45);
					}
	
					else if(intShapeChoice == 10)
					{
						setBackground(Color.red);
						g.setColor(Color.white);
						int xPoints[] = {10, 440, 10, 10};
						int yPoints[] = {340, 440, 180, 340};
						int nPoints = xPoints.length;
						g.drawPolygon(xPoints, yPoints, nPoints);
					}
	
					else if(intShapeChoice == 11)
					{
						setBackground(Color.yellow);
						g.setColor(Color.red);
						int xPoints[] = {10, 440, 10, 10};
						int yPoints[] = {340, 440, 180, 340};
						int nPoints = xPoints.length;
						g.fillPolygon(xPoints, yPoints, nPoints);
					}
	
					else
					{
						setBackground(Color.white);
						g.drawString("Enter a Valid Shape Number", 260, 40);
					}
				}
			}
			catch(Exception ex) 
			{
				g.drawString("Enter a Valid Shape Number", 260, 40);
			}
		}
	
		public boolean action(Event evnt, Object obj){
			repaint();
			return true;
		}
	}

इस एक ही Applet Program द्वारा हमने विभिन्न प्रकार के Shapes को अलग-अलग Fill Color व अलग-अलग Background Color द्वारा Draw किया है। साथ ही इस Program द्वारा हम ये भी समझ सकते हैं कि किस प्रकार से हम if Control Statement को भी Applet में Use कर सकते हैं और जरूरत के आधार पर Program के Control को किसी एक Point से किसी दूसरे Point पर भेज सकते हैं।

2 D Drawing - All Shapes

इस Program को Run करने पर हमें निम्नानुसार एक Applet दिखाई देता है, जिसमें एक Text Box व कुछ Options दिखाई देते हैं। User जिस Option के Number को Text Box में Type करके Enter Key Press करता है, उस Number से सम्बंधित Shape Applet में Draw हो जाता है।

इसी तरह से हम किसी Applet में किसी Drawing को विभिन्न Fill Colors में Draw करने के लिए Loop Control Statement का भी प्रयोग कर सकते हैं। इस काम को हम निम्न Program द्वारा पूरा कर सकते हैं:

	// File Name: ForLoopApplet.java
	
	import java.awt.*;
	import java.applet.*;
	
	public class ForLoopApplet extends Applet
	{
		public void paint(Graphics g)
		{
			Color newColor = new Color(0,0,0);
	
			for(int i=0; i<10; i++)
			{
				newColor = new Color(i*20+55, 0, 0);
				g.setColor(newColor);
				g.fillRect(i * 40, i * 10, 30, 60);
			}
		}
	}
2 D Drawing - Color Shades

इस प्रकार से हम अन्‍य Control Statements को भी अपनी जरूरत के अनुसार GUI Programming में Use कर सकते हैं और विभिन्न प्रकार के GUI Applications Develop कर सकते हैं।

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