با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن. و کاربرانی که دوره کامل آموزش برنامه نویسی جاوا را دنبال می کنند. در این بخش قصد داریم تا شما را با یکی از کلاس ها و یا افزونه های جاوا که قابلیت اجرا در مرورگر وب دارد آشنا کنیم. این کلاس به نام applet (اپلت) شناخته شده است. یک برنامه اپلت یک برنامه جاوا است که در یک مرورگر وب اجرا می شود. یک اپلت می تواند یک برنامه کاربردی جاوای کاملا کاربردی باشد زیرا دارای تمام API های ارائه شده در جاوا است. برای آشنایی با applet در جاوا و گرفتن پارامترهای applet در ادامه ی مباحث این بخش با ما همراه باشید.
در ادامه ی مباحث این آموزش برای آشنایی با applet در جاوا ما شما را با مفاهیم اولیه ی applet آشنا می کنیم.
برخی از تفاوت های مهم بین یک اپلت و یک برنامه جاوا مستقل، از جمله موارد زیر وجود دارد:
چهار متد در کلاس اپلت، فریم ورکی را برای اجرای هر اپلت ایجاد می کند:
این متد برای هر مقدار اولیه برای اپلت مورد نیاز است.
این متد به صورت خودکار پس از فراخوانی مرورگر از متد init بدست می آید.
این متد به صورت خودکار زمانی فراخوانی می شود که کاربر صفحه ای را که روی آن اپلت نشسته است را حرکت بدهد.
این متد تنها زمانی فراخوانی می شود که مرورگر به طور معمول بسته شود.
بلافاصله پس از متد () start و همچنین هر زمان که اپلت باید خود را در مرورگر مجددا پرینت بگیرد، فراخوانی می شود.
در زیر یک اپلت ساده به نام HelloWorldApplet.java را ایجاد کرده ایم:
1 2 3 4 5 6 7 8 | import java.applet.*; import java.awt.*; public class HelloWorldApplet extends Applet { public void paint (Graphics g) { g.drawString ("Hello World", 25, 50); } } |
این موارد دستورات import کلاس ها را به کلاس اپلت ما منتقل می کند.
بدون اظهارات import فوق، کامپایلر جاوا کلاس اپلت و گرافیک را که کلاس اپلت به آن اشاره می کند را تشخیص نمی دهد.
هر اپلت دارای فرمت کلاس java.applet.Applet است. کلاس اپلت پایه متد هایی را که یک کلاس اپلت مشتق شده ممکن است تماس بگیرد تا اطلاعات و خدمات را از متن مرورگر به دست آورد را فراهم می کند.
این متدها موارد زیر را انجام می دهد:
علاوه بر این، کلاس اپلت اینترفیسی را فراهم می کند که بیننده یا مرورگر اطلاعات مربوط به اپلت را دریافت کرده و اپلت را کنترل می کند.
کاربر ممکن است این اقدامات را انجام دهد:
کلاس اپلت اجرای پیش فرض هر یک از این متد ها را فراهم می کند. این پیاده سازی ها ممکن است در صورت لزوم لغو شوند.
یک اپلت ممکن است با جاسازی دستورالعملها در یک فایل HTML و مشاهده فایل از طریق یک مرورگر اپلت یا مرورگر جاوا فعال شود.
تگ <applet> مبنای تعبیه یک اپلت در یک فایل HTML است.
مثال زیر اپلت Hello World را فراخوانی می کند:
1 2 3 4 5 6 7 8 9 | <html> <title>The Hello, World Applet</title> <hr> <applet code = "HelloWorldApplet.class" width = "320" height = "120"> If your browser was Java-enabled, a "Hello, World" message would appear here. </applet> <hr> </html> |
صفت کد تگ <applet> کلاس اپلت را اجرا می کند. عرض و ارتفاع نیز برای مشخص کردن اندازه اولیه پانل که در آن یک اپلت اجرا می شود، لازم است.
دستورالعمل اپلت باید با یک تگ </ applet> بسته شود.
اگر یک اپلت به پارامترها برسد، برای پارامترها می توان مقدار ها را با اضافه کردن برچسب های <param> بین <applet> و </ applet> منتقل کرد.
مرورگر متن و تگ های دیگر که بین تگ های اپلت باشد را نادیده می گیرد.
مرورگرهایی که در آن جاوا فعال نباشد تگ <applet> و </ applet> را پردازش نمی کنند. بنابراین، هر چیزی که بین تگ ها ظاهر می شود، مربوط به اپلت نیست، و در مرورگرهایی که جاوا ندارد قابل مشاهده است.
برای مشخص کردنم کد جاوای اسکریپت شده نیز از تگ <applet> به عنوان نشان داده شده استفاده کنید:
1 2 | <applet codebase = "https://amrood.com/applets" code = "HelloWorldApplet.class" width = "320" height = "120"> |
اگر یک اپلت در یک پکیج غیر از پیش فرض قرار گیرد، پکیج نگهدارنده باید در ویژگی کد با استفاده از کاراکتر (.) برای جدا کردن اجزای بسته / کلاس مشخص شود.
برای مثال:
1 2 | <applet = "mypackage.subpackage.TestApplet.class" width = "320" height = "120"> |
مثال زیر نشان می دهد که چگونه یک اپلت به پارامترهای تنظیم شده در سند پاسخ دهد.
این اپلت یک الگوی شطرنجی سیاه و سفید و یک رنگ دوم را نمایش می دهد.
رنگ دوم و اندازه هر مربع ممکن است به عنوان پارامتر اپلت درون سند مشخص شود.
CheckerApplet پارامترهای آن را در متد ()init می گیرد. همچنین ممکن است پارامترهای آن را در متد ()paint پیدا کنید.
مرورگر از متد ()init برای هر برنامه اپلت استفاده می کند.
مرورگر، یک بار بلافاصله پس از بارگذاری اپلت، متد ()init را فراخوانی می کند.
متد Applet.getParameter () پارامتر را با توجه به نام پارامتر (مقدار یک پارامتر همیشه یک رشته است) انتخاب می کند.
در زیر ساختار CheckerApplet.java را ارائه کرده ایم:
1 2 3 4 5 6 7 8 9 10 | import java.applet.*; import java.awt.*; public class CheckerApplet extends Applet { int squareSize = 50; // initialized to default size public void init() {} private void parseSquareSize (String param) {} private Color parseColor (String param) {} public void paint (Graphics g) {} } |
در اینجا CheckerApplet شامل متد خصوصی () Init و () ParseSquareSize است:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | public void init () { String squareSizeParam = getParameter ("squareSize"); parseSquareSize (squareSizeParam); String colorParam = getParameter ("color"); Color fg = parseColor (colorParam); setBackground (Color.black); setForeground (fg); } private void parseSquareSize (String param) { if (param == null) return; try { squareSize = Integer.parseInt (param); } catch (Exception e) { // Let default value remain } } |
اپلت متد () parseSquareSize را برای پارامتر squareSize تجزیه می کند.
متد () parseSquareSize از متد کتابخانه () Integer.parseInt ، که یک رشته را تجزیه می کند و یک عدد صحیح را به دست می دهد استفاده می کند.
() Integer.parseInt یک خطا را هر وقت که آرگومانش نامعتبر باشد اجرا می کند.
بنابراین متد ()parseSquareSize یک اپلت ورودی نامعتبر را اجرا نکرده و به جای آن خطایی صادر می کند.
اپلت () parseColor پارامتر رنگ را به یک مقدار Color تجزیه می کند.
() parseColor یک سری مقادیر رشته ای را برای مقادیر پارامتر با نام یک رنگ از پیش تعریف شده مطابقت می دهد.
شما باید این متد ها را برای انجام این کار اپلت اجرا کنید.
مثال زیر یک فایل HTML با CheckerApplet تعبیه شده در آن است.
فایل HTML هر دو پارامتر را به اپلت با استفاده از تگ <param> مشخص می کند.
1 2 3 4 5 6 7 8 9 | <html> <title>Checkerboard Applet</title> <hr> <applet code = "CheckerApplet.class" width = "480" height = "320"> <param name = "color" value = "blue"> <param name = "squaresize" value = "30"> </applet> <hr> </html> |
نکته : نام پارامتر حساس به حروف (کوچک یا بزرگ) نیست.
شما می توانید یک برنامه ی کاربردی را به یک اپلت جاوا تبدیل کرده و آن را در یک صفحه وب قرار دهید.
در زیر مراحل خاصی برای تبدیل یک برنامه به یک اپلت ارائه شده است:
اپلت ها گروهی از متدهای مدیریت رویداد را از کلاس Container به ارث می برند.
کلاس Container چندین متد را برای پردازش انواع خاصی از رویدادها، مانند processKeyEvent و processMouseEvent تعریف می کند.
سپس یک متد processEvent تمام catch ها را فراخوانی می کند.
به منظور واکنش به یک رویداد، یک اپلت باید متد خاص رویداد مناسب را لغو کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | import java.awt.event.MouseListener; import java.awt.event.MouseEvent; import java.applet.Applet; import java.awt.Graphics; public class ExampleEventHandling extends Applet implements MouseListener { StringBuffer strBuffer; public void init() { addMouseListener(this); strBuffer = new StringBuffer(); addItem("initializing the apple "); } public void start() { addItem("starting the applet "); } public void stop() { addItem("stopping the applet "); } public void destroy() { addItem("unloading the applet"); } void addItem(String word) { System.out.println(word); strBuffer.append(word); repaint(); } public void paint(Graphics g) { // Draw a Rectangle around the applet's display area. g.drawRect(0, 0, getWidth() - 1, getHeight() - 1); // display the string inside the rectangle. g.drawString(strBuffer.toString(), 10, 20); } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { } public void mousePressed(MouseEvent event) { } public void mouseReleased(MouseEvent event) { } public void mouseClicked(MouseEvent event) { addItem("mouse clicked! "); } } |
اکنون applet فوق را بصورت زیر فراخوانی می کنیم:
1 2 3 4 5 6 7 8 | <html> <title>Event Handling</title> <hr> <applet code = "ExampleEventHandling.class" width = "300" height = "300"> </applet> <hr> </html> |
ابتدا اپلت “مقداردهی اولیه اپلت را آغاز می کند. شروع اپلت” را نشان می دهد.
هنگامی که در داخل مستطیل کلیک کنید، “mouse clicked” نیز نمایش داده می شود.
یک اپلت می تواند تصاویری از فرمت GIF، JPEG، BMP و دیگران را نمایش دهد.
برای نمایش یک تصویر درون اپلت، از متد () drawImage در کلاس java.awt.Graphics استفاده کنید.
مثال – در زیر نمونه ای از تمام مراحل نمایش تصاویر را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | import java.applet.*; import java.awt.*; import java.net.*; public class ImageDemo extends Applet { private Image image; private AppletContext context; public void init() { context = this.getAppletContext(); String imageURL = this.getParameter("image"); if(imageURL == null) { imageURL = "java.jpg"; } try { URL url = new URL(this.getDocumentBase(), imageURL); image = context.getImage(url); } catch (MalformedURLException e) { e.printStackTrace(); // Display in browser status bar context.showStatus("Could not load image!"); } } public void paint(Graphics g) { context.showStatus("Displaying image"); g.drawImage(image, 0, 0, 200, 84, null); g.drawString("www.javalicense.com", 35, 100); } } |
حالا applet فوق را بصورت زیر فراخوانی می کنیم:
1 2 3 4 5 6 7 8 | <html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "300" height = "200"> <param name = "image" value = "java.jpg"> </applet> <hr> </html> |
یک اپلت میتواند فایل صوتی نمایشی از رابط AudioClip را در بسته java.applet پخش کند. اینترفیس AudioClip دارای سه متد زیر است:
کلیپ صوتی را یک بار از ابتدا پخش می کند.
کلیپ صوتی را به طور پیوسته پخش می کند.
پخش کلیپ صوتی را متوقف می کند.
برای به دست آوردن یک شی AudioClip، باید از متد () getAudioClip کلاس اپلت استفاده کنید.
متد () getAudioClip بلافاصله باز می شود.
این که آیا آدرس URL به یک فایل صوتی واقعی حل می شود یا خیر. فایل صوتی تا زمانی که تلاش برای پخش کلیپ صوتی انجام نمی شود، دانلود نمی شود.
در ادامه به مثالی از یک برنامه پرداخته ایم که تمام مراحل پخش صوتی را نشان می دهد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | import java.applet.*; import java.awt.*; import java.net.*; public class AudioDemo extends Applet { private AudioClip clip; private AppletContext context; public void init() { context = this.getAppletContext(); String audioURL = this.getParameter("audio"); if(audioURL == null) { audioURL = "default.au"; } try { URL url = new URL(this.getDocumentBase(), audioURL); clip = context.getAudioClip(url); } catch (MalformedURLException e) { e.printStackTrace(); context.showStatus("Could not load audio file!"); } } public void start() { if(clip != null) { clip.loop(); } } public void stop() { if(clip != null) { clip.stop(); } } } |
حالا نحوه ی فراخوانی اپلت فوق در html بصورت زیر خواهد بود:
1 2 3 4 5 6 7 8 | <html> <title>The ImageDemo applet</title> <hr> <applet code = "ImageDemo.class" width = "0" height = "0"> <param name = "audio" value = "test.wav"> </applet> <hr> </html> |
اپلت به عنوان یک کلاس یا یک افزونه در جاوا به شما قابلیت اجرای کدهای جاوا در html را می دهد و با استفاده از کدهای جاوا می توانید تصویری یا متن یا فایل چندرسانه ای را در کد html ایجاد کنید. که در مرور مباحث آشنایی با applet در جاوا به این نمونه ها اشاره کردیم.