مقدمه ای بر Java
در نمایش آنلاین پاورپوینت، ممکن است بعضی علائم، اعداد و حتی فونتها به خوبی نمایش داده نشود. این مشکل در فایل اصلی پاورپوینت وجود ندارد.
- جزئیات
- امتیاز و نظرات
- متن پاورپوینت
برچسبهای مرتبط
- Comment
- java
- Object Oriented Programming
- OOP
- آرایه
- آرایه ها
- افزودن Checkbox
- افزودن Label
- ایجاد شی آرایه
- ایجاد شیء آرایه
- برنامه نویسی جاوا
- برنامه نویسی شی گرا
- پاورپوينت مقدمه ای بر Java
- پاورپوینت
- پاورپوینت آماده
- پاورپوینت رایگان
- تبدیل نوع اشیاء
- تقدم عملگرها
- جاوا
- دانلود پاورپوینت
- دانلود پاورپوینت آماده
- دانلود پاورپوینت رایگان
- زبان برنامه نویسی Java
- زبان برنامه نویسی جاوا
- عملگرها
- عناصر آرایه
- قوانين نام گذاری متغیرها
- کلاس ها و اشیا
- کلاس ها و اشیاء
- لیترال
- لیترال عددی
- متغیر
- متغیر نوع کلاس
- متغیرهای کلاس
- مقدمه ای بر Java
امتیاز
مقدمه ای بر Java
اسلاید 1: مقدمه اي بر Java : جاوا ثمره 15 سال تلاش جهت ایجاد زبان برنامه نویسی بهتر و محیط ساده تر برای ساخت برنامه های مطمئن تر می باشد.
اسلاید 2: برنامه نویسی شی گرا : (Object Oriented Programming (OOPاگر چه زمان زیادی می برد، تا بتوانید در این برنامه نویسی خبره شوید، ولی منطق اولیه این نوع برنامه نویسی بسیار ساده است، ایجاد اشیا به همان صورتی که در طبیعت وجود دارند.برای شروع موارد زیر را بررسی می کنیم:ایجاد کلاسهااتصال کلاسها به یکدیگر به گونه ای که یک کلاس خواص کلاس های دیگر را به ارث ببرد.لینک کلاسها به یکدیگر از طریق Package ها و واسطها.
اسلاید 3: کلاسها و اشیاء : Class & Object اصول برنامه نویسی شیء گرا از جهان واقعی اقتباس شده است. در جهان واقعی یک شیء از اشیاء کوچکتر تشکیل شده است. بنابر این در برنامه نویسی شیء گرا قابلیت ترکیب اشیا برای ایجاد اشیاء بزرگتر یکی از اصول می باشد.از کلاسها برای ایجاد اشیاء استفاده می کنیم، در واقع اشیاء نمونه های یک کلاس می باشند. برای مثال از کلاس به نام دانشجو می توان تعداد زیادی شیء دانشجو ایجاد کرد.
اسلاید 4: متغیر :Variable یک متغیر محلی جهت نگهداری اطلاعات در زمان اجرای برنامه می باشد. مقدار متغیر را می توان در طول اجرای برنامه تغییر داد. روش ایجاد متغیر در زبان جاوا به صورت زیر می باشد.Data_Type Variable_Name;مثال :int highScore;String username;boolean gameOver;
اسلاید 5: نكتهسه نوع متغیر متفاوت در زبان جاوا وجود دارد این سه نوع متغیر عبارتند از:متغیرهای نمونهInstance Variable این نوع متغیرها هنگام ایجاد یک شی از کلاس مقدار می گیرند، اشیا متفاوتی که از روی یک کلاس ساخته می شوند، می توانند دارای مقادیر متفاوتی برای این نوع متغیر باشند.متغیرهای کلاس Class Variableمتغیرهای کلاس در هنگام تعریف کلاس مقدار می گیرند، و مقدارشان برای تمام اشیا کلاس یکسان می باشد.
اسلاید 6: متغیرهای محلی Local Variableاین نوع متغیرها درون یک متد یا بخشی از یک متد تعریف می شوند. نكته
اسلاید 7: نكتهبر خلاف دیگر زبانهای برنامه نویسی در زبان جاوا متغیر Global وجود ندارد .
اسلاید 8: مقدار دهی اولیه به متغیرها در زبان جاوا به صورت زیر می باشد.Data_Type Variable_name = Value;int zipcode = 90210;String name = ”Brandon”;boolean cheatedOnKelly = true;int age = 28, height = 70, weight = 140;مقدار دهی اولیه به متغیرها : Default Value
اسلاید 9: متغیرهای محلی باید قبل از استفاده مقدار دهی شوند، بنابر این بهتر است به تمام متغیرهای محلی مقدار اولیه نسبت داد.نکته: متغیرهای نوع کلاس و نمونه بسته به نوع متغیر مقدار اولیه می گیرند.متغیرهای عددی : 0 متغیرهای منطقی : falseاشیاء : null متغیرهای کاراکتری : ‘O’نكته
اسلاید 10: نام گذاری متغیرهاNaming Variables : نام یک متغیر باید با یک حرف، underscore یا $ آغاز شده و پس از آن می تواند ترکیبی از حروف واعداد باشد .نکته: به این دلیل که زبان جاوا از unicode استفاده می کند، نام متغیرها می تواند شامل هر کاراکتری که دارای کد unicode است، باشد. نکته: زبان جاوا یک زبان Case-Sensitive می باشد.نکته: برای متغیرهای خود نامهای با معنی انتخاب کنید. این امر باعث می شود که نام متغیرها بهتر در ذهنتان بماند.
اسلاید 11: جهت افزایش خوانایی نام متغیرها از قواعد زیر استفاده کنید.برای اولین حرف نام متغیر از حروف کوچک استفاده کنید.اگر نام متغیر بیش از یک کلمه است، اولین حرف کلمات بعدی را به صورت بزرگ تایپ کنید.تمام کلمات دیگر را به صورت کوچک تایپ نمایید.قوانين نام گذاری متغیرها
اسلاید 12: انواع متغیرها از نظر نوع اطلاعات:توجه داشته باشید که علاوه بر نام متغیر باید نوع اطلاعاتی را کهمی خواهیم درون یک متغیر درج نماییم، تعیین کنیم. نوع اطلاعات یک متغییر یکی از حالات زیر می باشد. نوع داده مقدماتینام یک کلاس یا واسطیک آرایه
اسلاید 13: انواع داده ای مقدماتی :Primitive Data Type در مجموع 8 نوع داده ای متفاوت برای اعداد صحیح، اعداد اعشاری، کاراکترها و مقادیر منطقی وجود دارد. انواع داده ای فوق را انواع اولیه(پایه) هم می نامند. دلیل نام گذاری فوق وجود این انواع داده ای در زبان جاوا به طور پیش فرض می باشد، به عبارت دیگر این انواع داده ای شیء نیستند بنابراین استفاده از آنها راحت تر است. انواع داده ای فوق در هر محیط اجرا و سیستم عاملی دارای طول یکسان می باشند.
اسلاید 14: 1 ) Integer Type
اسلاید 15: 2 ) Floating Point TypeValue that can be storedSizeType1.4E-45 to 3.4E+38 -Float4.9E-324 to 1.7E+308 -Doubleبرای ذخیره کردن کاراکترها از char و برای ذخیره کردن داده های منطقی از boolean استفاده می شود.برای ذخیره کردن کاراکترها از char و برای ذخیره کردن داده های منطقی از boolean استفاده می شود.برای ذخیره کردن کاراکترها از char و برای ذخیره کردن داده های منطقی از boolean استفاده می شود.
اسلاید 16: متغیر نوع کلاس : Class Type Variableعلاوه بر هشت نوع داده ای فوق یک، متغیر می تواند از نوع کلاس تعریف شود. به مثالهای زیر توجه کنید.String lastname = “Walsh”;Color hair;وقتی یک متغیر از نوع کلاس تعریف می شود، آنگاه این متغیر اشاره به یک شیء از آن کلاس یا یکی از زیر کلاسهایش دارد. برای مثال کلاس Fruit را در نظر بگیرید، فرض کنید این کلاس دارای سه زیر کلاس با نامهای Apple، Pear یا Strawberry می باشد. اگر متغیری از نوع کلاس Fruit به نام favoriteFruit ایجاد نمایید، این متغیر می تواند به یکی از سه کلاس Apple، Pear یا Strawberry اشاره کند.
اسلاید 17: نكتهتعریف یک متغیر از نوع Object به این معناست که این متغیر می تواند به هر شیء اشاره نماید.در زبان جاوا کلمه کلیدی مشابه typedef در C++ وجود ندارد. برای ایجاد یک نوع داده ای جدید باید کلاس جدیدی تعریف نمایید
اسلاید 18: اختصاص مقدار به متغیرها : Assigning Value to Variable اختصاص مقدار به متغیرها به صورت زیر می باشد.IdCode = 8675309;snappyDresser = false;
اسلاید 19: توضیحات : Commentجهت افزایش خوانایی برنامه از توضیحات استفاده می شود. در زبان جاوا دو روش برای افزودن توضیحات به برنامه وجود دارد.توضیحات یک خطی: در ابتدای خط از علامت // استفاده می شود.int creditHours = 3; //Setup credit hours for course
اسلاید 20: توضیحات : Commentتوضیحات چند خطی:ابتدا و انتهای آنها به ترتیب از علامتهای */ و /* استفاده می شود . /* This program was written late at night under the influence of expired antihistamine medicine and generic supermarket soda. I offer no warranties express nor implied that works for any useful purpose whatsoever. */
اسلاید 21: لیترال :Literal علاوه بر متغیرها از لیترالها نیز در در عبارات جاوا استفاده می شود. لیترالها شامل اعداد، متن یا هر داده دیگری می باشند، که مقدار آنها دقیقاً مشخص است.int year = 1998;
اسلاید 22: لیترال عددیزبان جاوا لیترالهای عددی متفاوتی دارد. برای مثال عدد 4 میتواند به یکی از صورتهای زیر در نظر گرفته شود.int pennyTotal = 4;byte pennyTotal = 4;short pennyTotal = 4;long pennyTotal = 4L;
اسلاید 23: نكاتبرای اینکه یک لیترال عددی نظیر 4 به صورت long در نظر گرفته شود، از حرف L بعد از عدد 4استفاده می کنیم .اگر بخواهیم اعداد را در مبنای 8 یا 16 در نظر بگیریم، قبل از عدد مورد نظر به ترتیب 0 یا 0x درج می کنیم. برای مثال اگر بخواهیم عدد 777 را در مبنای 8 در نظر بگیریم، عدد را به صورت 0777 تایپ می کنیم. و اگر بخواهیم مبنای را 16 در نظر بگیریم عدد را به صورت 0xFF يا 0x12 تایپ می کنیم. اگر بخواهیم یک لیترال را به صورت منفی در نظر بگیریم، به صورت زیر عمل می کنیم.int pennyTotal = -4;
اسلاید 24: نكات: تمام لیترالهای اعشاری به عنوان double در نظر گرفته می شوند، مگر اینکه با ذکر حرف F بعد از عدد آن را به عنوان float تعریف کنیم.double myGPA = 2.25;float piValue = 3.1415927F;اگر بخواهید یک لیترال اعشاری را به صورت توانی ذکر نمایید، به صورت زیر عمل نمایید.double x = 12e22;double y = 19E-45;
اسلاید 25: لیترالهای منطقیاین لیترالها یکی از مقادیر true یا false می باشند، و به صورت زیر تعریف می شوند.boolean toThineOwnself = true;لیترالهای کاراکتری این نوع لیترالها به صورت زیر به کار می روند.char letter = ’3’;char letter = ’a’;
اسلاید 26: کاراکترهای خاص:
اسلاید 27: لیترالهای رشته ایاین نوع لیترالها به صورت زیر ذکر می شوند.String coauthor = ”Laura Lemay, Killer of trees”;String example = “Socrates asked, ”Hemlock is poisson?” ”;String title = “Sams Teach Yourself Java in a 3-Day Weekendu2122”;همان طور که ملاحظه می فرمایید، می توان از کاراکترهای خاص در این نوع لیترالها استفاده کرد. عبارت u2122 کد سمبل TM می باشد.
اسلاید 28: عملگرها:عملگرها سمبلهایی برای انجام اعمال محاسباتی، مقایسه های منطقی و ... می باشند.نکته: امکان اتنسابهای چند گانه در زبان جاوا وجود دارد.x = y = z = 7;توجه داشته باشید، که عملگرهای =+، =-، =*، =/، ++، -- در زبان جاوا وجود دارند.
اسلاید 29: عملگرهای مقایسه ایعملگرهای منطقی:این عملگرها اعمال AND، OR، XOR و NOT را انجام می دهند.boolean unusual = (age < 21) & (brotherAge >78);به جای & از && هم می توان استفاده کرد، تفاوت دو عملگر فوق در این است که عملگر & هر دو عملوند را در نظر می گیرد، ولی عملگر && ابتدا به عملوند اول نگاه می کند، اگر مقدار این عملوند false باشد، به عملوند دوم توجه نمی کند.Boolean unusual = (grimThoughts>10) || (brotherAge>78);
اسلاید 30: تفاوت عملگر || با عملگر | در این است، که وقتی مقدار عملوند اول true باشد، به مقدار عملوند دوم توجه نمی کند و مقدار true باز می گرداند.برای XOR از عملگر ^ و برای NOT از عملگر ! استفاده می شود.
اسلاید 31: تقدم عملگرها:تقدم عملگرها به صورت زیر می باشد :عملگرترتيب()1++ , --2* , / , %3+ , -4
اسلاید 32: عملگر:new همان طور که می دانید برنامه های جاوا از مجموعه ای از کلاسها تشکیل می شود. ضمناً می دانید که از کلاسها برای ایجاد اشیاء استفاده می شود. برای این منظور از عملگر new به صورت زیر استفاده میشود:class_type object_name = new class-type();String teamName = new String();Random randInfo = new Random();Point pt = new Point(0,0);
اسلاید 33: مثال:import java.util.Random;class RandomNumbers { public static void main(String arguments[]) { Random r1, r2; r1 = new Random(); System.out.println(Random value 1: + r1.nextDouble()); r2 = new Random(8675309); System.out.println(Random value 2: + r2.nextDouble()); }}
اسلاید 34: نكاتکلاس Random در حالت پیش فرض(بدون آرگومان) زمان جاری سیستم را به عنوان آرگومان درنظر می گیرد. : کلاس Random اعداد را از مجموعه ای متوالی و بسیار بزرگ استخراج می کند. این مجموعهpseudo-random number generation نامیده می شود.توجه داشته باشید که خط هفتم برنامه فوق شیئی از کلاس Random می سازد، که همیشه دارای مقدار0.754788115099576 می باشد. دلیل این مسئله وجود آرگومان ثابت هنگام ایجاد شیء است.
اسلاید 35: نكاتاگر بخواهید عدد ایجاد شده توسط کلاس Random را به عدد صحیح تبدیل کنید به صورت زیر عمل می نمایید.Random r1 = new Random();int number = (int)(r1.nextDouble()*12); در این صورت مقدار متغیر number عددی بین 0 و 11 خواهد بود.
اسلاید 36: نكاتنکته: هنگام استفاده از عملگر new اعمال زیر انجام می شود :نمونه ای جدید از یک کلاس ساخته می شود.فضای حافظه به شیء جدید و متغیرهایش اختصاص می یابد.متد constructor (سازنده) کلاس فراخوانی می شود.
اسلاید 37: نكاتمتد Constructor متدی است، که برای ایجاد و مقدار دهی اولیه نمونه های یک کلاس استفاده می شود. متد Constructor شیء جدید و متغیرهایش را مقدار دهی می کند، تمام اشیاء دیگری را که این شیء به آنها احتیاج دارد، را ایجاد می نماید و تمام عملیات دیگری را که برای مقدار دهی شیء مورد نیاز است، را انجام می دهد .متد Constructor را می توان چندین بار و هر بار با تعداد آرگومان متفاوت تعریف کرد
اسلاید 38: نكات و مثالاختصاص فضای حافظه به یک شیء و آزاد سازی آن در زبان جاوا به صورت اتوماتیک انجام می شود، و نیازی به نوشتن کد جهت انجام این اعمال وجود ندارد.import java.awt.Point;class SetPoints {public static void main(String arguments[]) { Point location = new Point(4, 13); System.out.println(Starting location:); System.out.println(X equals + location.x); System.out.println(Y equals + location.y); System.out.println(nMoving to (7, 6)); location.x = 7; location.y = 6; System.out.println(nEnding location:); System.out.println(X equals + location.x); System.out.println(Y equals + location.y); }}
اسلاید 39: متغیرهای کلاس:همان طور که ملاحظه کردید، متغیر کلاس متغیری است، که تعریف و مقدار دهی آن درون کلاس انجام می شود و مقدار این متغیر برای تمام نمونه های کلاس ثابت است. در واقع تفاوت این نوع متغیر با متغیرهای نمونه در این است که اگر مقدار این نوع متغیرها در یکی از نمونه های کلاس تغییر کند، این تغییر مقدار به تمام نمونه های دیگر اعمال می شود، در حالی که در مورد متغیرهای نمونه این طور نیست.class FamilyMember{ static String surname = “Igwebuike”; String name; int age;}
اسلاید 40: نكاتجهت دسترسی به متغیرهای کلاس مانند متغیرهای عمومی عمل می کنیم.FamilyMember dad = new FamilyMember();System.out.println(“Family’s surname is : ” + dad.surname);System.out.println(“Family’s surname is : ” + FamilyMember.surname);
اسلاید 41: نكات و مثالفراخوانی متدها نیز مانند فراخوانی متغیرها می باشد.class CheckString { public static void main(String arguments[]) { String str = In my next life, I will believe in reincarnation; System.out.println(The string is: + str); System.out.println(Length of this string: + str.length()); System.out.println(The character at position 7: + str.charAt(7)); System.out.println(The substring from 24 to 31: + str.substring(24, 31)); System.out.println(The index of the character x: + str.indexOf(x)); System.out.println(The index of the beginning of the + substring will: + str.indexOf(will)); System.out.println(The string in upper case: + str.toUpperCase()); }}
اسلاید 42: متدهای کلاسمتدهای کلاس مانند متغیرهای کلاس می باشند، از این نوع متد زمانی استفاده می شود، که عملیات آن به طور مستقیم بر روی نمونه ای از کلاس اثر نگذارد. برای مثال کلاس String متدی دارد که می تواند انواع متفاوت داده ای را بپذیرد و نمونه ای جدید از کلاس String شامل مقدار رشته ای آرگومان ایجاد کند. String s1, s2;s1 = “item”;s2 = s1.valueOf(5);s2 = String.valueOf(5);
اسلاید 43: ضمناً متدهای کلاس برای جمع آوری متدهایی با کاربرد مشابه درون یک کلاس کاربرد دارند. برای مثال کلاس Math که درون پکیج java.lang قرار دارد، شامل مجموعه عظیمی از عملیات ریاضی به عنوان متدهای کلاس می باشد. برای درک بهتر موضوع متد Math.max() را در نظر بگیرید. این متد دارای دو آرگومان است و مقدار آرگومانی را که بزرگتر است، را باز می گرداند.int maximumPrice = Math.max(firstPrice, SecondPrice);
اسلاید 44: ارجاع به اشیاءارجاع در واقع نوعی اشاره گر جهت نمایش مقدار یک شیء می باشد.import java.awt.Point;class ReferencesTest { public static void main (String arguments[]) { Point pt1, pt2; Point objectX:200Y:200 pt1 = new Point(100, 100); pt1 x:200 pt2 = pt1; pt2 y:200 pt1.x = 200; pt1.y = 200; System.out.println(“Point1: “ + pt1.x + “, “ + pt1.y); System.out.println(“Point2: “ + pt2.x + “, “ + pt2.y); }}
اسلاید 45: تبدیل نوع : Castتبدیل نوع داده یک متغیر به نوع دیگر را Cast می گویند. تبدیل نوع دارای انواع متفاوتی به شرح زیر مي باشد :تبدیل یک نوع داده ای اولیه به نوع داده ای اولیه دیگرتبدیل یک نوع داده ای اولیه به شیء و سپس بازگرداندن به همان نوع داده ای اولیهتبدیل نمونه ای از یک کلاس به نمونه ای از کلاس دیگر
اسلاید 46: تبدیل انواع داده ای پایه:این نوع تبدیل یک نوع اولیه را به نوع اولیه دیگر تبدیل می کند و عموماً جهت تبدیل انواع عددی به کار می رود. روش انجام عمل تبدیل به صورت زیر است:(type_name) value;(int)(x/y);نکته: عمل تبدیل نوع در مورد متغیرهای منطقی قابل انجام نیست.نکته: اگر یک نوع داده ای اولیه را به نوع داده ای دیگر با بازه کوچکتر تبدیل کنید، ممکن است مقداری از اطلاعات را از دست بدهید. برای مثال تبدیل نوع float به int را در نظر بگیرید.
اسلاید 47: تبدیل نوع اشیاءتنها محدودیتی که برای تبدیل اشیاء به یکدیگر وجود دارد، این است که کلاسهای آنها باید از طریق وراثت با یکدیگر مرتبط باشند.نکته: تمام زیر کلاسها را می توان به جای کلاس والد استفاده کرد. برای مثال متدی را در نظر بگیرید، که دارای دو آ رگومان می باشد، آرگومان اول از نوع Object و آرگومان دوم از نوع Window . نمونه های تمام کلاسها را می توان به جای آرگومان اول قرار داد، زیرا تمام کلاسهای جاوا زیر کلاس، کلاس Object می باشند و به جای آرگومان دوم می توان از کلاسهای FileDialog، Dialog و Frame استفاده کرد.
اسلاید 48: تبدیل نوع کلاسها به صورت زیر انجام می شودمثال:Employee emp = new Employee();vicePresident veep = new vicePresident();emp = veep; //no cast need for upward use;veep = (vicePresident)emp; //must cast explicity
اسلاید 49: تبدیل انواع داده ای اولیه به اشیاء و بر عکسجهت تبدیل انواع داده ای پایه به اشیاء کلاسهایی در زبان جاوا در نظر گرفته شده است. این کلاسها عبارتند از: Integer، Float و ... . توجه داشته باشید که نام این کلاسها با حروف بزرگ شروع می شود، در حالی که نام انواع داده ای با حروف کوچک آغاز می شود. عملکرد جاوا در مورد انواع داده ای پایه و کلاسهای مشابه شان بسیار متفاوت است و در صورتی که یکی از آنها به جای دیگری استفاده شوند، خطای کامپایل ایجاد می کنند.
اسلاید 50: روش تبدیل یک نوع داده ای اولیه به شیء به صورت زير مي باشد Class_name Object_name = new Class_name(Value);مثال:Integer dataCount = new Integer(4403);نکته: استفاده از این اشیاء مانند دیگر اشیاء می باشد و هیچ تفاوتی بین آنها وجود ندارد.اگر بخواهید شیء فوق را مجدداً تبدیل به نوع داده ای پایه نمایید، به روش زیر عمل کنید.Data_type Variable_name = Object_name.intValue();مثال:int newCount = dataCount.intValue(); //returns 4403
اسلاید 51: نكات و مثالاگر بخواهید نمونه ای ازکلاس String را به نوع داده ای int تبدیل نمایید، روش کار کمی متفاوت و به صورت زیر خواهد بود.Integer_Variable = Integer.parseInt(String_variable);مثال:String Pennsylvania = ”65000”;int penn = Integer.parseInt(Pennsylvania);
اسلاید 52: مقایسه مقادیر اشیاءاگر بخواهید مقادیر دو شیء را باهم مقایسه کنید، از چه عملگرهایی استفاده می کنید؟ اگر پاسخ شما عملگرهای == و=! می باشد، کاملاٌ در اشتباه هستید. این دو عملگر برابری خود اشیاء را بررسی می کنند، نه مقدار آنها را. برای مقایسه مقادیر دو شیء باید توابعی را در بدنه برنامه تان بگنجانید.برای مثال کلاس String را در نظر بگیرید. فرض کنید دو شیء متفاوت این کلاس دارای مقدار مشابه می باشند، اگر ازعملگر == جهت مقایسه اشیاء استفاده کنید، مقدار بازگشتی false خواهد بود.
اسلاید 53: مثال class EqualsTest { public static void main(String args[]) { String str1, str2; str1 = “Free the bound periodicals.”; str2 = str1; System.out.println(“String1: “ + str1); System.out.println(“String2: “ + str2); System.out.println(“Same object? “ + (str1 == str2)); str2 = new String(str1); System.out.println(“String1: “ + str1); System.out.println(“String2: “ + str2); System.out.println(“Same object? “ + (str1 == str2)); System.out.println(“Same value? “ + str1.equals(str2)); }}
اسلاید 54: تعیین کلاس یک شیءجهت انجام این عمل به یکی از روشهای زیر عمل می نماییم.1- Class_name Object_name = obj.getClass().getName();مثال:String name = obj.getClass().getName();2- Object_name instanceof Class_nameمثال:“Swordfish”instanceof String //truePoint pt = new Point(10,10);pt instanceof String //false
اسلاید 55: تعیین متدها و مشخصه های کلاسبه روش زیر می توان متدها و مشخصه های زیر را بارگذاری نمود و آنها را مشاهده کرد.مثال:import java.lang.reflect.*;import java.util.Random;class SeeMethods { public static void main(String[] arguments) { Random rd = new Random(); Class className = rd.getClass(); Method[] methods = className.getMethods(); for (int i = 0; i < methods.length; i++) { System.out.println(“Method: “ + methods[i]); } }}
اسلاید 56: آرایه هااز آرایه ها جهت ذخیره کردن لیستی از عناصر با نوع داده ای یکسان استفاده می شود. این نوع داده ای می تواند یک نوع داده ای اولیه یا یک کلاس باشد.نکته: نوع داده ای تمام عناصرآرایه باید یکسان باشد.در زبان جاوا برای ایجاد یک آرایه اعمال زیر را انجام می دهیم.تعریف یک متغیر به عنوان آرایهایجاد یک شیء آرایه جدید و اختصاص آن به متغیرآرایهذخیره اطلاعات درون آرایه
اسلاید 57: تعریف متغیر آرایه :Declaring Array Variable متغیر آرایه را به یکی از صورتهای زیر تعریف می کنیم :1- Data_type array_name[];مثال:String difficultWords[]; Point hits[]; int donations[];2- Data_type[] array_name;مثال:String[] difficultWords; Point[] hits; int[] donations;
اسلاید 58: ایجاد شیء آرایهبرای ایجاد شیء آرایه اعمال زیر را انجام می دهیم:استفاده از عملگر new مقدار دهی اولیه آرایهData_type array_name = new Data_type[Element_number];مثال:String[] playerNames = new String[10];int[] temps = new int[99];
اسلاید 59: نكات و مثال نکته: هنگام استفاده از عملگر new تمام خانه های آرایه مقدار می گیرند. این مقادیر به ازای انواع داده ای، متفاوت می باشند. مقادیر مذکور عبارتند از:0 برای عناصر آرایه های عددیfalse برای عناصر آرایه های منطقی ‘0’ برای عناصر آرایه های کاراکتری Null برای عناصر آرایه ای از اشیاء نکته: تعریف و مقدار دهی آرایه را می توان به طور همزمان انجام داد. برای انجام این کار از روش زیر استفاده می شود.Data_type array_name = {Value1, Value2, … };مثال:String[] chiles = {“jalapeno”, “anaheim”, “serrano”, “habanero”, “thai”};
اسلاید 60: عناصر آرایهجهت بررسی نحوه ی استفاده از عناصر آرایه به مثال زیر توجه کنید.class ArrayTest { String[] firstNames = { “Dennis”, “Grace”, “Bjarne”, “James” }; String[] lastNames = new String[firstNames.length]; void printNames() { int i = 0; System.out.println(firstNames[i]+ “ “ + lastNames[i]); i++; System.out.println(firstNames[i] + “ “ + lastNames[i]); i++; System.out.println(firstNames[i] + “ “ + lastNames[i]); i++; System.out.println(firstNames[i] + “ “ + lastNames[i]); }
اسلاید 61: public static void main (String arguments[]) { ArrayTest a = new ArrayTest(); a.printNames(); System.out.println(“-----“); a.lastNames[0] = “Ritchie”; a.lastNames[1] = “Hopper”; a.lastNames[2] = “Stroustrup”; a.lastNames[3] = “Gosling”; a.printNames(); }}
اسلاید 62: آرایه های چند بعدی : Multidimensional Arrayدر زبان جاوا آرایه های چند بعدی وجود ندارد، ولی این امکان وجود دارد که آرایه های تو در تو تعریف کنیم. به عبارت دیگر می توانیم آرایه تعریف نماییم که هر کدام از عناصرآن یک آرایه باشد.عبارات زیر روش تعریف این گونه آرایه ها و نحوه دسترسی به عناصر آن را نشان می دهد.int[][] coords = new int[12][12];coords[0][0] = 1; coords [0][1] = 2;
اسلاید 63: نكتهاگر بخواهیم متغیری را به بلوکی از برنامه محدود کنیم. به این صورت عمل می کنیم :void testBlock(){ int x = 10; { //Start of block int y = 40; y = y + x; } //End of block}
اسلاید 64: عبارت شرطی Ifازاین دستور به دوصورت استفاده می شود.1- if(Condition)Statement;2-if(Condition)Statement; else Statement;
اسلاید 65: مثال1- if(age > 39) System.out.println(“You call that a haicut?”);2- if(blindDataIsAttractive == true) restaurant = ”Benihanas”; else restaurant = ”Burritohut”;
اسلاید 66: نكات و مثالنکته: تفاوت دستور if در زبان جاوا و C در این است که در زبان جاوا پس از انجام مقایسه یک مقدار منطقی بازگردانده می شود، در حالی که زبان C یک عدد صحیح باز می گرداند.مثال:class EvenSteven { void evenCheck(int val) { System.out.println(“Value is “ + val + “. “); if (val % 2 == 0) System.out.println(“Steven!”); } public static void main (String arguments[]) { EvenSteven e = new EvenSteven(); e.evenCheck(1); e.evenCheck(2); e.evenCheck(54); e.evenCheck(77); e.evenCheck(1346); }}
اسلاید 67: نكات و مثالنکته: دستور زیر عملکردی مانند if else دارد.test ? trueResult : falseResult;مثال: عبارت زیر را در نظر گرفته و معادل آن را با دستور if بنویسید؟int ourBestScore = myScore > yourScore ? myScore : yourScore;int ourBestScore;if(myScore > yourScore) outBestScore = myScore;else ourBestScore = yourScore;
اسلاید 68: عبارت شرطی Switchاز دستور switch به این صورت استفاده می شود.switch(Variable){ case Value1: Statement; break; case Value2: Statement; break; case Value3: Statement; break; . . . default: Statement;}
اسلاید 69: مثالswitch(grade){ case ‘A’: System.out.println(“Great job – an A!”); break; case ‘B’: System.out.println(“Good job -- a B!”); break; case ‘C’: System.out.println(“Your grade was a C.”); break; default: System.out.println(“An F – consider cheating”) ;}
اسلاید 70: مثالمثال:switch(oper){ case ‘+’: addargs(arg1, arg2); break; case ‘*’: mulargs(arg1, arg2); break; case ‘-’: subargs(arg1, arg2); break; case ‘/’: divargs(arg1, arg2); break;}
اسلاید 71: نكتههمان طور که ملاحظه می فرمایید، وجود قسمت default اختیاری است و در صورت وجود اگر هیچکدام از قسمتها اجرا نشود، قسمت default اجرا خواهد شد.نکته: اگر چند شرط داشته باشیم که بخواهیم عملکرد یکسانی داشته باشند، به صورت زیرعمل می کنیم.Switch(x){ case ‘2’: case ‘4’: case ‘6’: case ‘8’: System.out.println(“x is an even number”); break; default: System.out.println(“x is an odd number”);}
اسلاید 72: مثالclass NumberReader { String convertNum(int val) { switch (val) { case 0: return “zero “; case 1: return “one “; case 2: return “two “; case 3: return “three “; case 4: return “four “; case 5: return “five “; case 6: return “six “; case 7: return “seven “; case 8: return “eight “; case 9: return “nine “; default: return “ “; } }
اسلاید 73: public static void main (String arguments[]) { NumberReader n = new NumberReader(); String num = n.convertNum(4) + n.convertNum(1) + n.convertNum(3); System.out.println(“413 converts to “ + num); }}
اسلاید 74: دستور Forدستور For به این صورت استفاده می شود.for(Initialization; Test; Increment){ Statement;}
اسلاید 75: مثالclass NamesLoop { String[] firstNames = { “Dennis”, “Grace”, “Bjarne”, “James” }; String[] lastNames = new String[firstNames.length]; void printNames() { for (int i = 0; i < firstNames.length; i++) System.out.println(firstNames[i] + “ “ + lastNames[i]); } public static void main (String arguments[]) { NamesLoop a = new NamesLoop(); a.printNames(); System.out.println(“-----“); a.lastNames[0] = “Ritchie”; a.lastNames[1] = “Hopper”; a.lastNames[2] = “Stroustrup”; a.lastNames[3] = “Gosling”; a.printNames(); }}
اسلاید 76: دستور Whileدستور while به این صورت است. while(Condition){ Statement;}
اسلاید 77: مثالclass CopyArrayWhile { public static void main (String arguments[]) { int[] array1 = { 7, 4, 8, 1, 4, 1, 4 }; float[] array2 = new float[array1.length]; System.out.print(“array1: [ “); for (int i = 0; i < array1.length; i++) { System.out.print(array1[i] + “ “); } System.out.println(“]”); System.out.print(“array2: [ “); int count = 0; while ( count < array1.length && array1[count] != 1) { array2[count] = (float) array1[count]; System.out.print(array2[count++] + “ “); } System.out.println(“]”); }}
اسلاید 78: دستور Do…Whileدستور do…while به این صورت است. do{ Statement;} while(Condition);
اسلاید 79: مثالclass DoTest { public static void main (String arguments[]) { int x = 1; do { System.out.println(“Looping, round “ + x); x++; } while (x <= 10); }}
اسلاید 80: نكتهتفاوت do…while و while در این است که دستور while ابتدا شرط را چک می کند، اگر شرط حلقه درست باشد عبارات داخل حلقه اجرا می شوند، ولی دستور در انتهای حلقهdo…while شرط را کنترل می کند، بنابر این عبارات داخل حلقه do…while حداقل یک بار اجرا می شوند.
اسلاید 81: دستور Breakاز این دستور برای خروج از حلقه در شرایط خاص استفاده می شود.int count = 0;while(count < userData1.length){ if(userData[count] == 1) break; userData2[count] = (float)userData1[count++];}
اسلاید 82: دستور Continueاز این دستور برای بازگشتن به ابتدای حلقه در شرایط خاص استفاده می شود.int count = 0;int count2 = 0;while(count++ <= userData1.length){ if(userData[count] == 1) continue; userData2[count2++] = (float)userData1[count];}
اسلاید 83: مثالclass LabelTest { public static void main (String arguments[]) { thisLoop: for (int i = 1; i <= 5; i++) for (int j = 1; j <= 3; j++) { System.out.println(“I is “ + i + “, j is “ + j); if (( i + j) > 4) break thisLoop; } System.out.println(“end of loops”); }}
اسلاید 84: تعریف کلاسهابه این خاطر که اساس برنامه نویسی جاوا بر پایه کلاسها می باشد، روش تعریف کلاسها را در قسمتهای قبل ملاحظه کردید. در این قسمت می خواهیم جزئیات این کار را بررسی کنیم.Class Class_name{ //body of the class}
اسلاید 85: نكتهتمام کلاسهایی که تعریف می کنیم زیر کلاس، کلاس Object می باشند. اگر بخواهیم کلاسی زیرکلاس، کلاس دیگری باشد، باید از عبارت زیر استفاده کنیم:Class Subclass_name extends Superclass{ //body of the class}
اسلاید 86: تعریف متغیرهای نمونهتعریف متغیرهای نمونه مانند تعریف متغیرهای محلی می باشد. تنها تفاوت آنها در محل تعریف متغیر است. در واقع متغیرهای محلی در بدنه متدهای یک کلاس تعریف می شوند و متغیرهای نمونه بیرون از بدنه ی متدها.مثال:class Student{ int studentNo; String name;}
اسلاید 87: ثوابتاگر بخواهیم متغیری تعریف نماییم که مقدارش در طول اجرای برنامه تغییر نکند، از ثوابت استفاده می کنیم.final Data_type Constant_name = Value;مثال:final float PI = 3.141592;
اسلاید 88: نكاتنکته: تمام انواع متغیرها اعم از متغیرهای کلاس، متغیرهای نمونه و متغیرهای محلی را می توان به صورت ثابت تعریف کرد.نکته: استفاده از ثوابت در بسیاری از موارد باعث افزایش خوانایی برنامه می شود. به علاوه باعث کاهش تغییر در کد برنامه در مواقعی که نیاز داریم، مقدار ثابت را تغییر دهیم، می شود.final byte MAX = 100;
اسلاید 89: متغیرهای کلاسهمان طور که می دانید متغیرهای کلاس برای تمام اشیاء یک کلاس مقدار یکسانی دارند.static Data_type Variable_name;static int sum;اگر بخواهیم یک متغیر کلاس را به صورت ثابت تعریف نماییم، از عبارت زیر استفاده می کنیم.static final Data_type Constant_name = Value;static final int MAX = 10;
اسلاید 90: تعریف متدهاتعریف متدها شامل چهار بخش می باشد.نام متدنوع شیء یا نوع داده ای اولیه ای که متد باز می گرداند.آرگومانهای متدبدنه متدData_type Method_name(Data_type1 arg1, ...){ //body of the method}
اسلاید 91: نكتهنکته: اگر مقدار بازگشتی یک آرایه باشد، تعریف متد به صورت زیر خواهد بود.Data_type[] Method_name(Data_type1 arg1, ...){ //body of the method}
اسلاید 92: مثالclass RangeClass { int[] makeRange(int lower, int upper) { int arr[] = new int[ (upper – lower) + 1 ]; for (int i = 0; i < arr.length; i++) { arr[i] = lower++; } return arr; } public static void main(String arguments[]) { int theArray[]; RangeClass theRange = new RangeClass(); theArray = theRange.makeRange(1, 10); System.out.print(“The array: [ “); for (int i = 0; i < theArray.length; i++) { System.out.print(theArray[i] + “ “); } System.out.println(“]”); }}
اسلاید 93: کلمه کلیدی Thisاگر بخواهید درون بدنه یک متد به متغیرهای نمونه شیء دسترسی پیدا کنید، یا به شیء جاری به عنوان آرگومان متد دیگر ارجاع کنید، باید از کلمه کلیدی this استفاده کنید.t = this.x; //The x instance variable for this objectthis.resetData(this); //Call the resetData method, defined in //this class, and pass it the current objectreturn this; //Return the current object
اسلاید 94: نكتهاغلب موارد نیازی به ذکر کلمه کلیدی this نمی باشد. برای مثال جهت دسترسی به متغیرها و متدهای نمونه نیازی به ذکر کلمه کلیدی this نمی باشد.t = x; resetData(this);
اسلاید 95: محدوده متغیرهامحدوده قسمتی از برنامه است که متغیر یا هر داده ی دیگری در آن قسمت قابل استفاده می باشد. محدوده متغیرهای محلی بلوکی است که درون آن تعریف شده اند. بنابر این تمام متدهای یک کلاس می توانند از متغیرهای نمونه و کلاس استفاده کنند.نکته: زمانی که برنامه جاوا با متغیری مواجه می شود، ابتدا دنبال تعریف آن به عنوان متغیر محلی می گردد. اگر چنین تعریفی وجود نداشت، به دنبال تعریف متغیر به عنوان متغیر نمونه یا متغیر کلاس در همان کلاس خواهد گشت، و در نهایت کلاسهای والد را به جهت یافتن تعریف متغیر جستجو خواهد کرد
اسلاید 96: مثالclass ScopeTest { int test = 10; void printTest () { int test = 20; System.out.println(“test = “ + test); } public static void main(String arguments[]) { ScopeTest st = new ScopeTest(); st.printTest(); }}
اسلاید 97: ارسال آرگومانها به متدهابرای بررسی چگونگی ارسال آرگومانها به متدها به مثال زیر توجه کنید.Class PassByReference { int onetoZero(int arg[]) { int count = 0; for (int i = 0; i < arg.length; i++) { if (arg[i] == 1) { count++; arg[i] = 0; } } return count; } public static void main(String arguments[]) { int arr[] = { 1, 3, 4, 5, 1, 1, 7 }; PassByReference test = new PassByReference(); int numOnes; System.out.print(“Values of the array: [ “); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + “ “); }
اسلاید 98: System.out.println(“]”); numOnes = test.onetoZero(arr); System.out.println(“Number of Ones = “ + numOnes); System.out.print(“New values of the array: [ “); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + “ “); } System.out.println(“]”); }}نکته: ارسال اشیاء و آرایه ها به متدها با روش فراخوانی با ارجاع و ارسال انواع داده ای پایه به صورت فراخوانی با مقدار است.
اسلاید 99: متدهای کلاسمتدهای کلاس ,متدهایی هستند که توسط خود کلاس ، اشیا کلاس و کلاسهای دیگر قابل استفاده می باشد، به عبارت دیگر برای استفاده از این متد نیازی به ایجاد شیء نمی باشد. برای مثال کلاس Math را در نظر بگیرید، این کلاس دارای تعداد زیادی متد می باشد که اعمال ریاضی را انجام می دهند. اگر بخواهید ازاین متدها استفاده کنید، کافی است عبارتی شبیه عبارات زیر را درون کد برنامه بگنجانید.float root = Math.sqrt(453.0);System.out.print(“The larger number is ” + Math.max(x,y));
اسلاید 100: نكته و مثالنکته: برای تعریف متد کلاس از کلمه کلیدی static استفاده می کنیم.static Data_type Method_name(Data_type1 Arg1, …){ //Body of the method}مثال:static int max(int arg1, int arg2){ //Body of the method}
اسلاید 101: ایجاد متدها با یک نام و آرگومانهای متفاوت : Function Overloadingمتدهای با نام مشابه دو وجه تمایز نسبت به یکدیگر دارند:تعداد آرگومانهانوع داده ای و اشیاء متفاوت به عنوان آرگومان نکته: زمانی متدهای با نام مشابه را ایجاد می کنیم، که این متدها همگی عمل یکسانی را انجام دهند. نکته: توجه داشته باشید که متدهای دارای نام مشابه باید مقدار بازگشتی یکسان داشته باشند، در غیر این صورت برنامه جاوا کامپایل نخواهد شد.
اسلاید 102: مثالimport java.awt.Point;class MyRect { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; MyRect buildRect(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; }
اسلاید 103: MyRect buildRect(Point topLeft, Point bottomRight) { x1 = topLeft.x; y1 = topLeft.y; x2 = bottomRight.x; y2 = bottomRight.y; return this; } MyRect buildRect(Point topLeft, int w, int h) { x1 = topLeft.x; y1 = topLeft.y; x2 = (x1 + w); y2 = (y1 + h); return this; }
اسلاید 104: void printRect(){ System.out.print(“MyRect: <” + x1 + “, “ + y1); System.out.println(“, “ + x2 + “, “ + y2 + “>”); } public static void main(String arguments[]) { MyRect rect = new MyRect(); System.out.println(“Calling buildRect with coordinates 25,25, 50,50:”); rect.buildRect(25, 25, 50, 50); rect.printRect(); System.out.println(“***”); System.out.println(“Calling buildRect with points (10,10), (20,20):”); rect.buildRect(new Point(10,10), new Point(20,20)); rect.printRect();
اسلاید 105: System.out.println(“***”); System.out.print(“Calling buildRect with 1 point (10,10),”); System.out.println(“ width (50) and height (50):”); rect.buildRect(new Point(10,10), 50, 50); rect.printRect(); System.out.println(“***”); }}
اسلاید 106: متد سازنده : Constructorمتد سازنده متدی است، که در زمان ایجاد یک شیء از کلاس فراخوانی می شود. بر خلاف دیگر متدها، متد new سازنده را نمی توان مستقیماً فراخوانی کرد. متد سازنده هنگام استفاده از عملگر new فراخوانی می شود.نکته: اگر متد سازنده در یک کلاس وجود نداشته باشد، باید متغیرهای نمونه را خودتان مقدار دهی کنید. انجام این عمل با فراخوانی متدهای دیگر قابل انجام است.
اسلاید 107: نكته و مثالنکته: متد سازنده دارای دو تفاوت عمده با متدهای دیگر می باشد. این تفاوتها عبارتند از:متدهای سازنده هم نام کلاسشان هستند، در حالی که نام متدهای دیگر را خودمان تعیین می کنیم.متدهای سازنده مقدار بازگشتی ندارند.مثال:class Person { String name; int age; Person(String n, int a) { name = n;
اسلاید 108: age = a; } void printPerson() { System.out.print(“Hi, my name is “ + name); System.out.println(“. I am “ + age + “ years old.”); } public static void main (String arguments[]) { Person p; p = new Person(“Luke”, 50); p.printPerson(); System.out.println(“----“);
اسلاید 109: p = new Person(“Laura”, 35); p.printPerson(); System.out.println(“----“); }}
اسلاید 110: فراخوانی یک متد سازنده توسط متد سازنده دیگربرای ملاحظه ی نحوه ی فراخوانی یک متد سازنده توسط متد سازنده ی دیگر به مثال زیر توجه کنید.مثال:class myCircle{ int x, y, radius; myCirlce(int xPoint, int yPoint, int rediusLength){ this.x = xPoint; this.y = yPoint; this.radius = radiusLength; } myCirlce(int xPoint, int yPoint){ this(xPoint, yPoint, 1); }}
اسلاید 111: مثال import java.awt.Point;class MyRect2 { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; MyRect2(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; }
اسلاید 112: MyRect2(Point topLeft, Point bottomRight) { x1 = topLeft.x; y1 = topLeft.y; x2 = bottomRight.x; y2 = bottomRight.y; } MyRect2(Point topLeft, int w, int h) { x1 = topLeft.x; y1 = topLeft.y; x2 = (x1 + w); y2 = (y1 + h); }
اسلاید 113: void printRect() { System.out.print(“MyRect: <” + x1 + “, “ + y1); System.out.println(“, “ + x2 + “, “ + y2 + “>”); } public static void main(String arguments[]) { MyRect2 rect; System.out.println(“Calling MyRect2 with coordinates 25,25 50,50:”); rect = new MyRect2(25, 25, 50,50); rect.printRect(); System.out.println(“***”);
اسلاید 114: System.out.println(“Calling MyRect2 with points (10,10), (20,20):”); rect= new MyRect2(new Point(10,10), new Point(20,20)); rect.printRect(); System.out.println(“***”); System.out.print(“Calling MyRect2 with 1 point (10,10)”); System.out.println(“ width (50) and height (50):”); rect = new MyRect2(new Point(10,10), 50, 50); rect.printRect(); System.out.println(“***”); }}
اسلاید 115: Overriding Methodsاگر دو متد دارای نام، مقدار بازگشتی و آرگومانهای یکسان باشند و یکی از متدها در کلاس والد و دیگری در کلاس فرزند باشد. متدی که در کلاس فرزند است، حق تقدم دارد.مثال://Super Classclass PrintClass { int x = 0; int y = 1; void printMe() { System.out.println(x is + x + , y is + y); System.out.println(I am an instance of the class + this.getClass().getName()); }}
اسلاید 116: //Sub Classclass PrintSubClass extends PrintClass { int z = 3; public static void main(String arguments[]) { PrintSubClass obj = new PrintSubClass(); obj.printMe(); }}
اسلاید 117: Overriding Construcrorمثالimport java.awt.Point;class NamedPoint extends Point { String name; NamedPoint(int x, int y, String name) { super(x,y); this.name = name; } public static void main (String[] arguments) { NamedPoint np = new NamedPoint(5, 5, SmallPoint); System.out.println(x is + np.x); System.out.println(y is + np.y); System.out.println(Name is + np.name); }}
اسلاید 118: متد خاتمه دهنده : Finalizer Methodمتد خاتمه دهنده مخالف متد سازنده می باشد. زمانی که نیاز به یک شیء خاتمه می یابد فراخوانی می شود. Protected void finalize() throws Throwable{ Super.finalize();}
اسلاید 119: اپلت :Applet برنامه های جاوایی که در سمت سرویس گیرنده اجرا می شوند. تفاوت اپلتها با برنامه های کاربردی جاوا در نحوه ی اجرای آنهاست. برنامه های کاربردی با درج نام برنامه در خط فرمان اجرا می شوند و اپلتها توسط لینکی در مرورگر وب.
اسلاید 120: محدودیتهای اپلتهااپلتها نمی توانند فایلهای درون سیستم را بخوانند یا روی آن بنویسند.اپلتها نمی توانند با هیچ سایتی غیر از سایتی که از روی آن بارگذاری شده اند، ارتباط برقرار کنند.اپلتها نمی توانند هیچ برنامه ای را در سیستم سرویس گیرنده اجرا کنند.اپلتها نمی توانند هیچ برنامه ای را در سیستم سرویس دهنده اجرا کنند.
اسلاید 121: ایجاد اپلتهابرای ایجاد یک اپلت به صورت زیر عمل می کنیم.public class Applet_Name extends java.applet.Applet{ //Applet Core Comes Here}نکته: تمام اپلتها را باید به صورت public تعریف کرد.
اسلاید 122: متدهای اپلتها متد initمتد start متد stop متدdestroy متدpaint
اسلاید 123: متد Initاین متد در زمان فراخوانی اپلت اجرا می شود. این متد اعمالی نظیر ایجاد اشیاء مورد نیاز اپلت، تنظیمات اولیه، بارگذاری تصاویر و فونتها و تنظیم پارامترها را انجام می دهد.public void init(){ //Core here}
اسلاید 124: متد Startپس از متد init این متد فراخوانی می شود. این متد زمانی هم که متد stop فراخوانی شده باشد قابل اجرا است.public void start(){ //Core here}
اسلاید 125: متدStop این متد اجرای اپلت را متوقف می کندpublic void stop(){ //Core here}
اسلاید 126: متد Destroyاین متد قبل از آزاد شدن فضای حافظه اختصاص داده شده به اپلت فراخوانی می شود. با اجرای این متد تمامی threadها و اشیاء از بین می روند. اگر اپلت از منابع خاصی نظیر threadها استفاده نکرده باشد، نیازی به override کردن این متد وجود ندارد.public void destroy(){ //Core here}
اسلاید 127: متد Paintاین متد نحوه ی نمایش اپلت را کنترل می کند. به کمک این متد می توان متن، خطوط، رنگ پشت زمینه و تصاویر را برای اپلت تعیین کرد. این متد بعد از متد init اجرا می شود. هرگاه اپلت نیازمند به روز رسانی باشد، این متد مجدداً فراخوانی می شود.public void paint(){ //Core here}
اسلاید 128: مثالJAVA FILE:import java.awt.Graphics;import java.awt.Font;import java.awt.Color;public class Palindrome extends java.applet.Applet { Font f = new Font(TimesRoman, Font.BOLD, 36); public void paint(Graphics screen) { screen.setFont(f); screen.setColor(Color.red); screen.drawString(Go hang a salami, Im a lasagna hog., 5, 40); }}
اسلاید 129: HTML FILE:<HTML><HEAD><TITLE>The Palindrome Page</TITLE></HEAD><BODY><P>My favorite meat-related palindrome is:<BR><APPLET CODE=Palindrome.class WIDTH=600 HEIGHT=100>A secret if your browser does not support Java!</APPLET></BODY></HTML>
اسلاید 130: تگ APPLETتگ APPLET در زبان HTML برای افزودن اپلتها به صفحات وب استفاده می شود. این تگ دارای خصایصی به شرح زیر می باشد.خصيصه WIDTH: تعیین کننده عرض صفحه وب.خصيصه HEIGHT: تعیین کننده ارتفاع صفحه وب.خصيصه ALIGN: تعیین کننده محل قرار گرفتن اپلت در صفحه وب. این خصیصه می تواند یکی از مقادیر زیر باشد.
اسلاید 131: خصايص ALIGN LEFT RIGHTTEXTTOPABSMIDDLEMIDDLEBASELINEBOTTOMABSBOTTOM
اسلاید 132: نکته <BR CLEAR = LEFT>اولین فضای خالی سمت چپ را در نظر می گیرد.<BR CLEAR = RIGHT>اولین فضای خالی سمت راست را در نظر می گیرد.<BR CLEAR = ALL>اولین فضای خالی را در نظر می گیرد.
اسلاید 133: خصایص HSPACE و VSPACE: تعیین میزان فاصله ی متن اطراف اپلت از آن. خصیصه HSPACE کنترل فضای افقی(سمت چپ و راست) و خصیصه VSPACE کنترل فضای عمودی(بالا و پایین) اپلت را انجام می دهد مثال: <APPLET CODE = “ShowSmiley.class” WIDTH = 45 HEIGHT = 42 ALIGN = LEFT VSPACE = 50 HSPACE = 10>Required Java</APPLET>
اسلاید 134: خصایص CODE و CODEBASEتعیین محل قرار گرفتن فایل کلاس پایه اپلت و دیگر فایلهای مورد نیاز. خصیصه CODE نام فایل کلاس پایه را تعیین می کند و خصیصه CODEBASE مسیر قرار گرفتن فایل کلاس پایه را تعیین می نماید.نکته: در صورتی که از خصیصه CODEBASE به همراه خصیصه CODE استفاده نشود، مسیر قرار گرفتن فایل کلاس پایه اپلت همان مسیر قرار گرفتن صفحه وبی خواهد بود که اپلت درون آن قرار دارد
اسلاید 135: مثال<APPLET CODE = “Bix.class” HEIGHT = “40” WIDTH = “400”> </APPLET><APPLET CODE = “Bix.class” CODEBASE = “Toshire” HEIGHT = “40” WIDTH = “400”> </APPLET><APPLET CODE = “Bix.class” CODEBASE = “http://www.Toshire.com/javaclasses” HEIGHT = “40” WIDTH = “400”> </APPLET>
اسلاید 136: تگ Objectتگ OBJECT برای تمام اشیاء قابل استفاده است، در حالی که تگ APPLET تنها توانایی بارگذاری اپلتها را داشت.<OBJECT CLASSID = “java.bix.class” CODEBASE = “javaclasses” HEIGHT = “40” WIDTH = “400”></OBJECT>
اسلاید 137: کلاس Graphicsاین کلاس شامل تمام متدهای ساده و اولیه می باشد. این کلاس درون بسته ی java.awt قرار دارد.مثال:import java.awt.Graphics;import java.awt.Polygon;public class Map extends java.applet.Applet { public void paint(Graphics screen) { screen.drawString(Florida, 185, 75); }}
اسلاید 138: ترسیم اشکال هندسی
اسلاید 139: ترسیم خطوطبرای ترسیم خطوط از متد drawLine استفاده می شود. این متد خطی بین دو نقطه ی (x1,y1) و (x2,y2)ترسیم می کند.drawLine(x1,y1,x2,y2);
اسلاید 140: چهار ضلعی برای ترسیم چهار ضلعی از متد drawRect استفاده می کنیم. به کمک این متد می توان دو نوع مستطیل ترسیم نمود.1 ) مستطیل با گوشه های تیزdrawRect(x, y, width, height);2 ) مستطیل با گوشه های گردdrawRoundRect(x, y, width, height, roundWidth, RoundHeight);نکته: برای پر کردن فضای خالی داخل مستطیل از متدهای fillRect() و fillRoundRect() استفاده می شود.
اسلاید 141: چند ضلعیبرای ترسیم چند ضلعی از متد drawPolygon() و برای پر کردن فضای داخل آن از متد fillPolygon() استفاده می شود.int x[] = {10, 20, 30, 40, 50};int y[] = {15, 25, 35, 45, 55};int points = x.Length;Polygon poly = new Polygon(x, y, points);نكته: پس از ایجاد چند ضلعی برای افزودن یک نقطه ی جدید به آن از متد addPoint(x, y); استفاده می شود.نكته: برای پر کردن فضای داخل چند ضلعی از متد fillpolygon() استفاده می شود.
اسلاید 142: بیضی و دایره برای ترسیم بیضی و دایره از متد drawOval() و برای پر کردن فضای داخل آن از متد fillOval() استفاده می شود.drawOval(x, y, width, height);نكته: مقدار width و height برای ترسیم دایره برابر است.
اسلاید 143: کمانبرای ترسیم کمان از متد drawArcs() و برای پر کردن فضای داخل آن از متد fillArcs() استفاده می شود.drawArcs(x, y, width, height, start_angle, traveled_degree);
اسلاید 144: مثالimport java.awt.Graphics;import java.awt.Polygon;public class Map extends java.applet.Applet { public void paint(Graphics screen) { screen.drawString(Florida, 185, 75); screen.drawLine(185,80,222,80); screen.drawRect(2, 2, 345, 345); screen.drawRoundRect(182,61,43,24,10,8); int x[] = { 10, 234, 253, 261, 344, 336, 295, 259, 205, 211, 195, 191, 120, 94, 81, 12, 10 }; int y[] = { 12, 15, 25, 71, 209, 278, 310, 274, 188, 171, 174, 118, 56, 68, 49, 37, 12 };
اسلاید 145: int pts = x.length; Polygon poly = new Polygon(x, y, pts); screen.drawPolygon(poly); screen.fillOval(235,140,15,15); screen.fillOval(225,130,15,15); screen.fillOval(245,130,15,15); for (int ax = 50; ax < 150; ax += 10) for (int ay = 120; ay < 320 ; ay += 10) screen.drawArc(ax, ay, 10, 10, 0, -180); }}
اسلاید 146: نكاتنکته: برای کپی یا پاک کردن قسمتی از پنجره ی اپلت از متدهای copyArea() و clearRect() استفاده می شود.copyArea(x, y, width, height, horizontal_distance, vertical_distance);screen.CopyArea(0, 0, 100, 100, 50, 25);clearRect(x, y, width, height);نکته: برای پاک کردن کل پنجره ی اپلت از متدهای clearRect() به صورت زیر استفاده می شود.screen.clearRect(0, 0, size().width, size().height);
اسلاید 147: ایجاد شیء Fontبرای ایجاد شیء Font باید سه آرگومان به متد سازنده ی کلاس Fontارسال کرد. این سه آرگومان عبارتند از:نام فونتحالت فونت(Italic، Bold، Plain)سایز فونتمثال:Font f = new Font(“Dialog”, Font.BOLD + Font.ITALIC, 24);نكته: براي استفاده از یک شیء Font از متد setFont() استفاده می شود.screen. setFont(f);نكته: براي ترسيم روي صفحه نمايش از متد drawString() استفاده می شود.
اسلاید 148: مثالimport java.awt.Font;import java.awt.Graphics;import java.awt.FontMetrics;public class SoLong extends java.applet.Applet { public void paint(Graphics screen) { Font f = new Font(Courier, Font.BOLD, 18); FontMetrics fm = getFontMetrics(f); screen.setFont(f); String s = So long, and thanks for all the fish.; int x = (size().width - fm.stringWidth(s)) / 2; int y = size().height / 2; screen.drawString(s, x, y); }}
اسلاید 149: رنگبا استفاده از کلاسهای color و colorSpace می توان رنگ مورد استفاده در برنامه های کاربردی و اپلتها را تعیین کرد.
اسلاید 150: شیء Colorبرای تعیین رنگ رو زمینه باید یک شیء Color ایجاد کنیم، یا از یکی از رنگهای استاندارد کلاس Color استفاده کنیم. شیء Color به یکی از صورتهای زیر ایجاد می شود.Color c1 = new Color(0.807F, 1F, 0F);Color c2 = new Color(255, 204, 102);
اسلاید 151: رنگهای استاندارد نکته: رنگ رو زمینه را با استفاده از یکی از روشهای زیر تعیین می کنیم.screen.setColor(Color.pink);Color brush = new Color(255, 204, 102);screen.setColor(brush);نکته: برای تعیین رنگ پشت زمینه از متد setBackground() استفاده می کنیم.نکته: متد setForeground() مانند متد setColor() می باشد با این تفاوت که این متد رنگ یک پنجره یا یک دکمه را تعیین می کند.نکته: اگر می خواهید بدانید رنگ جاری چیست، می توانید از متد getColor() کلاس Graphics یا متدهای getBackground() یا getForeground() کلاس Applet استفاده کنید.
اسلاید 152: شیء Graphics2Dبرای ایجاد شیء Graphics2D به صورت زیر عمل می کنیم.public void paint(Graphics screen){ Graphics2D screen2D = (Graphics2D)screen;}
اسلاید 153: الگوهای ترسیم الگوهای ترسیم چگونگی رنگ آمیزی و ترسیم یک شیء را کنترل می کند. اگر از Java2D استفاده می کنید می توانید رنگهای ساده، سایه روشن، یا دارای بافت را به کار ببرید. الگوی ترسیم با استفاده از متد setPaint() کلاس Graphics تعیین می شود.
اسلاید 154: الگوی ترسیم Gradientالگوی ترسیم Gradient دو رنگ متفاوت برای دو نقطه در نظر می گیرد و فاصله بین این دو نقطه با تغییر تدریجی یک رنگ به رنگ دیگر پر می کند. این الگو به دو صورت acyclic و cyclic قابل استفاده است.
اسلاید 155: متد سازنده GradientPaint به صورت زیر است.GradientPaint(x1, y1, color1, x2, y2, color2, true);توجه داشته باشید که استفاده از آرگومان آخر متد اختیاری است. در صورتی که از این آرگومان استفاده شود الگوی ترسیم به صورت cyclic و در غیر این صورت acyclic خواهد بود.بعد از ایجاد شیء GradientPaint با استفاده از متد setPaint() الگوی ترسیم جاری را تغییر می دهیم.GradientPaint pat = new GradientPaint(0f, 0f, Color.white, 100f, 45f,Color.blue);Screen2D.setPaint(pat);
اسلاید 156: نكاتنكته: خطوطی كه تا اينجا ملاحظه کردید یک پیکسل ضخامت داشتند، ولی در Java2D می توان عرض خطوط را نیز تعیین کرد. برای این منظور از متد setStroke() و کلاس BasicStroke() استفاده می شود.متد سازنده ی BasicStroke دارای سه آرگومان به شرح زیر می باشد.یک مقدار folat به عنوان پهنای خط با مقدار پیش فرض یکیک مقدار int برای تعیین دو سر خطیک مقدار int برای تعیین حالت اتصال دو خط به یکدیگر
اسلاید 157: عبارات زیر یک شیء BasicStroke ایجاد می کند و آن رابه عنوان قلم جاری در نظر می گیرد.BasicStroke pen = BasicStroke(2.0f, BasicStroke.CAP_BUTT, BasicStroke.JOINROUND);Screen2D.setStroke(pen);
اسلاید 158: خطوطایجاد خطوط در حالت دو بعدی با استفاده از کلاس Line2D.Float صورت می گیرد. این کلاس دارای چهار آرگومان به عنوان مختصات دو سر خط می باشد.Line2D.Float ln = new Line2D.Float(60F, 5F, 13F, 28F);نکته: اگر بعد از آرگومانها از کاراکتر F استفاده نشود، کامپایلر جاوا آنها را به عنوان int در نظر می گیرد.
اسلاید 159: چهارضلعی ایجاد مستطیل با استفاده از کلاسهای Rectangle2D.Float یا Rectangle2D.Double صورت می پذیرد. تفاوت این دو کلاس در نوع آرگومانهایشان است، در واقع کلاس Rectangle2D.Float آرگومانهای float و Rectangle2D.Double آرگومانهای double می پذیرد.کلاس Rectangle2D.Float چهار آرگومان می پذیرد این چهار آرگومان عبارتند از: x، y، width و height.Rectangle2D.Float rc = new Rectangle2D.Float(10F, 13F, 40F, 20F);
اسلاید 160: بیضی و دایرهبرای ایجاد بیضی و دایره از کلاس Ellipse2D.Float استفاده می شود. این کلاس دارای چهار آرگومان x، y، width و height می باشد.Ellipse2D.Float ee = new Ellipse2D.Float(113, 25, 22, 40);
اسلاید 161: کمان : Arcبرای ایجاد کمان از کلاس Arc2D.Float استفاده می شود. این کلاس دارای هفت آرگومان به صورت زیر می باشد.Arc2D.Float Object_name = new Arc2D.Float(x, y, width, height, Start_degree, Traveled_degree, Closing_method);شش آرگومان اول را قبلاً بررسی کردیم، آرگومان هفتم نحوه ی خاتمه کمان را مشخص می کند.Arc2D.Float arc = new Arc2D.Float(27, 22, 30, 33, 90, Arc2D.PIE);
اسلاید 162: چند ضلعیبرای ایجاد چند ضلعی ها ابتدا باید یک شیء از کلاس GeneralPath ایجاد کنیم.GeneralPath polly = new GeneralPath();پس از آن با استفاده از متدmoveTo() اولین نقطه را ایجاد می کنیم.Polly.moveTo(5F, 0F);سپس با استفاده از متد lineTo() خطوط مورد نظر را ایجاد می کنیم.polly.lineTo(205F, 0F);polly.lineTo(205F, 90F);و در نهایت با استفاده از متد زیر مسیر را می بندیم.polly.closePath();
اسلاید 163: نکات و مثالبرای ترسیم متن روی صفحه نمایش از متد drawstring با آرگومانهای float استفاده می شود.import java.awt.*;import java.awt.geom.*;public class Map2D extends java.applet.Applet { public void paint(Graphics screen) { Graphics2D screen2D = (Graphics2D)screen; setBackground(Color.blue); // Draw waves screen2D.setColor(Color.white); BasicStroke pen = new BasicStroke(2F, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND);
اسلاید 164: screen2D.setStroke(pen); for (int ax = 10; ax < 340; ax += 10) for (int ay = 30; ay < 340 ; ay += 10) { Arc2D.Float wave = new Arc2D.Float(ax, ay, 10, 10, 0, 180, Arc2D.OPEN); screen2D.draw(wave); } // Draw Florida GradientPaint gp = new GradientPaint(0F,0F,Color.green, 50F, 50F, Color.orange,true);screen2D.setPaint(gp);GeneralPath fl = new GeneralPath();
اسلاید 165: fl.moveTo(10F,12F); fl.lineTo(234F,15F); fl.lineTo(253F,25F); fl.lineTo(261F,71F); fl.lineTo(344F,209F); fl.lineTo(336F,278F); fl.lineTo(295F,310F); fl.lineTo(259F,274F); fl.lineTo(205F,188F); fl.lineTo(211F,171F); fl.lineTo(195F,174F); fl.lineTo(191F,118F); fl.lineTo(120F,56F); fl.lineTo(94F,68F); fl.lineTo(81F,49F); fl.lineTo(12F,37F); fl.closePath(); screen2D.fill(fl);
اسلاید 166: // Draw ovals screen2D.setColor(Color.black); BasicStroke pen2 = new BasicStroke(); screen2D.setStroke(pen2); Ellipse2D.Float e1 = new Ellipse2D.Float(235,140,15,15); Ellipse2D.Float e2 = new Ellipse2D.Float(225,130,15,15); Ellipse2D.Float e3 = new Ellipse2D.Float(245,130,15,15); screen2D.fill(e1); screen2D.fill(e2); screen2D.fill(e3); }}
اسلاید 167: ایجاد تصویر متحرکایجاد تصاویر متحرک در زبان جاوا شامل مراحل زیر است1. ترسیم متن، اشیاء، یا فایلهای تصویری2. ارسال دستور نمایش ترسیمات به سیستم نمایش برنامه
اسلاید 168: کنترل تصاویر متحرک به کمک Threadهاتصاویر متحرک بهترین گزینه برای توضیح Threadها می باشد. با استفاده از Thread می توان بیش از یک وظیفه(Task) را درون برنامه اجرا کرد. با قرار دادن کد مربوط به بارگذاری انیمیشن درون Thread، بقیه ی قسمتهای برنامه از جزییات بارگذاری انیمیشن رهایی یافته و می توانند اعمال دیگری را انجام دهند.برای نوشتن اپلتها با استفاده از Threadها باید اعمال زیر را انجام دهیم.
اسلاید 169: نوشتن اپلتها با استفاده از Threadهاافزودن عبارت implement Runnableایجاد یک شیء ThreadOverride کردن متد start() برای ایجاد اپلت و راه اندازی آنOverride کردن متد stop() برای null کردن Thread در حال اجراایجاد متد run() که حاوی عباراتی است که باعث اجرای مکرر اپلت می شود.public class AppletName extends java.applet.Applet implements Runnable{//Applet Core}
اسلاید 170: نكاتکلاس Thread درون پکیج java.lang قرار دارد، به همین دلیل نیازی به استفاده از import برای بارگذاری آن نداریم.نکته: کلمه کلیدی Runnale برای ایجاد واسط استفاده می شود. در اینجا واسط Runnable توسط کلاسی که به عنوان Thread عمل می کند، پیاده سازی می شود.نکته: برای ایجاد یک Thread ابتدا باید متغیری از نوع Thread تعریف نماییم.Thread runner;تعریف این متغیر درون متد start() اپلت انجام می شود و تا زمانی که شیء آن ساخته نشده باشد، مقدار آن null است. برای ایجاد شیء Thread به صورت زیر عمل می کنیم.
اسلاید 171: ايجاد شي Thread public void start(){ if(runner == null){ runner = new Thread(this); runner.start(); }}همان طور که ملاحظه می کنید اپلت را به شیء runner لینک کردیم. این عمل از طریق کلمه کلیدی this انجام می شود. حال باید متد run را به اپلت اضافه کنیم.public void run(){//What your applet actually does comes here}
اسلاید 172: مثالمتد run() قلب اپلت شماست، از این متد برای ایجاد توالی تصاویر در فریمهای مختلف استفاده می شود. بعد از نوشتن کدهای لازم درون متد run باید ابتدا متد stop() را برای متوقف کردن Thread، override نماییم. برای متوقف کردن Thread آن را برابر null قرار می دهیم.import java.awt.Graphics;import java.awt.Font;import java.util.Date;public class DigitalClock extends java.applet.Applet implements Runnable { Font theFont = new Font(TimesRoman,Font.BOLD,24); Date theDate; Thread runner;
اسلاید 173: public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public void stop() { if (runner != null) { runner = null; }} public void run() { Thread thisThread = Thread.currentThread(); while (runner == thisThread) { repaint(); try {
اسلاید 174: Thread.sleep(1000); } catch (InterruptedException e) { } } } public void paint(Graphics screen) { theDate = new Date(); screen.setFont(theFont); screen.drawString( + theDate.toString(), 10, 50); }}
اسلاید 175: مثالimport java.awt.Graphics;import java.awt.Font;import java.util.Calendar;public class DigitalClock12 extends java.applet.Applet implements Runnable { Font theFont = new Font(TimesRoman,Font.BOLD,24); Calendar theDate; Thread runner; public void start() {
اسلاید 176: if (runner == null) { runner = new Thread(this); runner.start(); } } public void stop() { if (runner != null) { runner = null; } }
اسلاید 177: public void run() { Thread thisThread = Thread.currentThread(); while (runner == thisThread) { repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { } } }
اسلاید 178: public void paint(Graphics screen) { theDate = Calendar.getInstance(); screen.setFont(theFont); screen.drawString( + theDate.getTime(), 10, 50); }}
اسلاید 179: نكاتهنگامی که متد repaint() فراخوانی می شود این متد، متدupdate() را فراخوانی می کند. متد update() محتویات صفحه نمایش را پاک می کند و رنگ پشت زمینه را جایگزین آن می نماید و سپس متد paint() را صدا می زند، به همین دلیل نمایش انیمیشن دارای پرش خواهد بود.برای جلوگیری در پرش تصاویر هنگام نمایش انیمیشن دو راه وجود دارد. Override کردن متد update() به صورتی که صفحه نمایش را پاک نکند یا تنها قسمتهایی را که تغییر کرده است پاک نماید.Override کردن متد update()و paint() واستفاده از بافرینگ دو گانه (double buffering) توجه داشته باشید که روش اول ساده تر است ولی روش دوم کارائی بهتری دارد .
اسلاید 180: متد update() یک اپلت در حالت پیش فرض به صورت زیر است:public void update (Graphics screen){screen.setColor(getBackground());screen.fillRect(0, 0, size().width, size.height());screen.setColor(getForegrund());paint(screen);}
اسلاید 181: مثالimport java.awt.Graphics;import java.awt.Color;import java.awt.Font;public class ColorSwirl extends java.applet.Applet implements Runnable { Font f = new Font(TimesRoman, Font.BOLD, 48); Color colors[] = new Color[50]; Thread runner; public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } }
اسلاید 182: public void stop() { runner = null; } public void run() { // initialize the color array float c = 0; for (int i = 0; i < colors.length; i++) { colors[i] = Color.getHSBColor(c, (float)1.0,(float)1.0); c += .02; } // cycle through the colors int i = 0;
اسلاید 183: Thread thisThread = Thread.currentThread(); while (runner == thisThread) { setForeground(colors[i]); repaint(); i++; try { Thread.sleep(200); } catch (InterruptedException e) { } if (i == colors.length ) i = 0; } } public void paint(Graphics screen) { screen.setFont(f); screen.drawString(Look to the Cookie!, 15, 50); }}
اسلاید 184: دریافت و استفاده از تصاویربرای دریافت و استفاده از تصاویر ابتدا باید کلاس URL را که درون java.net می باشد، را import نمائیم و سپس یک شی از آن بسازیم. برای انجام این عمل به صورت زیر عمل می نمائیم. URL u = new URL(“http://www.perfect.com/java21pre/image/book.gif”);پس از آن از متد getImage() برای قرار دادن تصاویر درون شی Image استفاده می شود . این متد به یکی از صورتهای زیر استفاده می شود.getImage() با یک آرگومان که URL تصویر را مشخص می کند .getImage() با دو آرگومان. آرگومان اول URL تصویر و آرگومان دوم مسیر عکس یا فایل تصویری.
اسلاید 185: نكات: روش اول ساده تر و روش دوم انعطاف پذیرتر است.نکته: کلاس Applet دارای دو متد برای ایجاد URL بدون اختصاص آدرس به آن درون برنامه می باشد. این دو متد عبارتند از:متدgetDocumentBase() این متد URLی را به ما باز می گر داند که محتوای آن آدرس پوشه ای است که فایل اپلت درون آن قرار دارد.متد :getCodeBase() شی URLی را به ما باز می گرداند که محتوای آن آدرس اپلت را می باشد. Image img = getImage(getDocumentBase(), book.gif); Image img = getImage(getDocumentBase(), image/book.gif);
اسلاید 186: ترسیم تصاویربعد از ایجاد شی Image باید آن را نمایش دهید. برای انجام این عمل از متد darwImage() کلاس Graphics استفاده می شود. برای نمایش تصاویر با اندازه واقعی آن متدdrawImage() با چهار آرگومان زیر فراخوانی می شود.شی Image xyکلمه کلیدیthispublic void paint (Grapics screen ){screen.drawImage(img, 10, 10, this);}
اسلاید 187: برای نمایش تصاویربا اندازه دلخواه متد getImage با شش آرگومان زیر فراخوانی می شود شی Imagexywidthheightکلمه کلیدی this
اسلاید 188: مثالimport java.awt.Graphics;import java.awt.Image;public class Fillmore extends java.applet.Applet { Image whig; public void init() { whig = getImage(getCodeBase(), images/fillmore.jpg); } public void paint(Graphics screen) { int iWidth = whig.getWidth(this); int iHeight = whig.getHeight(this); int xPos = 10; // 25%
اسلاید 189: screen.drawImage(whig, xPos, 10, iWidth / 4, iHeight / 4, this); // 100% xPos += (iWidth / 4) + 10; screen.drawImage(whig, xPos, 10, this); }}
اسلاید 190: ایجاد انیمیشن با استفاده از تصاویرایجاد انیمیشن با استفاده از تصاویر نظیر ایجاد انیمیشن با استفاده از فونتها، رنگها و دیگر اشیاء می باشد. تنها تفاوتی که وجود دارد، نیاز به استفاده از فضایی جهت نگهداری تصاویر می باشد.ایجاد انیمیشن Neko: می خواهیم با استفاده از تصاویر انیمیشنی ایجاد کنیم.
اسلاید 191: ایجاد انیمیشن Neko قدم اول: عکسهای مورد نظر را از سایت زیر download کنید.http://www.perfect.com/java21preقدم دوم: نمایش یکی از تصاویربرای انجام این کار ابتدا تصاویر را درون یک آرایه ذخیره می کنیم و یک شیء به نام currentImg جهت نگهداری تصویری که می خواهیم نمایش دهیم، ایجاد می کنیم.Image nekoPics[] = new Image[9];Image currentImg;به دلیل اینکه می خواهیم تصاویر در نقاط مختلف صفحه نمایش نمایان شوند، دو متغیر x و y را برای نگهداری مختصات تعریف می کنیم.
اسلاید 192: int x;int y = 50;با استفاده از متد init() تصاویر را درون آرایه nekoPics قرار می دهیم.public void init() { String nekoSrc[] = { right1.gif, right2.gif, stop.gif, yawn.gif, scratch1.gif, scratch2.gif,sleep1.gif, sleep2.gif, awake.gif }; for (int i=0; i < nekoPics.length; i++) { nekoPics[i] = getImage(getCodeBase(), images/ + nekoSrc[i]); }}
اسلاید 193: قدم سوم:پس از بارگذاری تصاویر نوبت متحرک کردن تصاویر فرا می رسد. برای انجام این عمل از متد run() استفاده می کنیم.در برنامه Neko اعمال زیر انجام می شود.از سمت چپ صفحه نمایش شروع به دویدن می کند.وسط صفحه نمایش می ایستد و خمیازه می کشد.چهار بار عضلات خود را می کشد.می خوابد.از خواب بیدار شده و به سمت راست صفحه نمایش دویده و از آنجا خارج می شود.
اسلاید 194: هر کدام از این اعمال درون یک تابع تعریف می شودف این امر باعث می شود که انجام اعمال تکرار پذیر باشند. این متدها عبارتند از:1 - ) متد nekoRun(): این متد دارای دو آرگومان start و end می باشد. به کمک این آرگومانها محل شروع دویدن و خاتمه آن را تعیین می کنیم.void nekoRun(int start, int end) {//Method Core Comes Here}برای القای حرکت گربه مختصات تصویر را تغییر می دهیم، و برای تغییر محتوای تصویر محتوای شیء currentImg را تغییر خواهیم داد. و در نهایت برای ترسیم مجدد از متد repaint() استفاده می کنیم.آخرین عملی که باید درون متد nekoRun() انجام شود، متوقف کردن حلقه ی for قبل از بارگذاری تصویر جدید می باشد. برای انجام این عمل از متد زیر استفاده می کنیم.void pause(int time) { try { Thread.sleep(time); } catch (InterruptedException e) { }}
اسلاید 195: 2 - ) متد nekoRun() به صورت زیر می باشد.void nekoRun(int start, int end) { for (int i = start; i < end; i += 10) { x = i; // swap images if (currentImg == nekoPics[0]) currentImg = nekoPics[1]; else currentImg = nekoPics[0]; repaint(); pause(150); }}متد paint() اپلت به صورت زیر است.public void paint(Graphics screen) { if (currentImg != null) screen.drawImage(currentImg, x, y, this);}
اسلاید 196: نكتهاعمالی که فقط یک فریم هسنتد را درون متد run() می نویسیم.در اینجا نوبت انجام اعمال زیر می باشد.تغییر تصویر درون متغیر currentImgفراخوانی متد repaint()متوقف کردن اپلت برای یک محدوده زمانی مشخص// stop and pausecurrentImg = nekoPics[2];repaint();pause(1000);// yawncurrentImg = nekoPics[3];repaint();pause(1000);
اسلاید 197: 3 - ) متد nekoScratch(): حال باید قسمت مربوط به کشش عضلات را پیاده سازی کنیم. برای این کار متد nekoScratch() را ایجاد می کنیم. این متد دارای یک آرگومان می باشد که بیانگر تعداد دفعات کشش عضلات می باشد.void nekoScratch(int numTimes) { for (int i = numTimes; i > 0; i--) { currentImg = nekoPics[4]; repaint(); pause(150); currentImg = nekoPics[5]; repaint(); pause(150); }}
اسلاید 198: 4 - ) متد nekoSleep(): از این متد جهت پیاده سازی قسمت مربوط به خوابیدن استفاده می شود.void nekoSleep(int numTimes) { for (int i = numTimes; i > 0; i--) { currentImg = nekoPics[6]; repaint(); pause(250); currentImg = nekoPics[7]; repaint(); pause(250); }}
اسلاید 199: حال گربه مورد نظر از خواب بلند می شود و به سمت راست صفحه نمایش رفته و از آنجا خارج می شود.currentImg = nekoPics[8];repaint();pause(500);nekoRun(x, size().width + 10);در اینجا بررسی برنامه خاتمه یافته و کل آن را یک جا ذکر می کنیم.
اسلاید 200: مثالimport java.awt.Graphics;import java.awt.Image;import java.awt.Color;public class Neko extends java.applet.Applet implements Runnable { Image nekoPics[] = new Image[9]; Image currentImg; Thread runner; int x; int y = 50; public void init() {
اسلاید 201: String nekoSrc[] = {right1.gif, right2.gif, stop.gif, yawn.gif, “scratch1.gif, scratch2.gif,sleep1.gif, sleep2.gif,awake.gif }; for (int i=0; i < nekoPics.length; i++) { nekoPics[i] = getImage(getCodeBase(), images/ + nekoSrc[i]); } }
اسلاید 202: public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public void stop() { runner = null; } public void run() { setBackground(Color.white); // run from one side of the screen to the middle nekoRun(0, size().width / 2);
اسلاید 203: // stop and pause currentImg = nekoPics[2]; repaint(); pause(1000); // yawn currentImg = nekoPics[3]; repaint(); pause(1000); // scratch four times nekoScratch(4); // sleep for 5 turns nekoSleep(5); // wake up and run off currentImg = nekoPics[8]; repaint(); pause(500); nekoRun(x, size().width + 10);
اسلاید 204: } void nekoRun(int start, int end) { for (int i = start; i < end; i += 10) { x = i; // swap images if (currentImg == nekoPics[0]) currentImg = nekoPics[1]; else currentImg = nekoPics[0]; repaint(); pause(150); } }
اسلاید 205: void nekoScratch(int numTimes) { for (int i = numTimes; i > 0; i--) { currentImg = nekoPics[4]; repaint(); pause(150); currentImg = nekoPics[5]; repaint(); pause(150); } } void nekoSleep(int numTimes) { for (int i = numTimes; i > 0; i--) { currentImg = nekoPics[6]; repaint(); pause(250);
اسلاید 206: currentImg = nekoPics[7]; repaint(); pause(250); } } void pause(int time) { try { Thread.sleep(time); } catch (InterruptedException e) { } } public void paint(Graphics screen) { if (currentImg != null) screen.drawImage(currentImg, x, y, this); }}
اسلاید 207: نکته : با وجود اینکه در زبان جاوا آزاد کردن فضای حافظه اختصاص داده شده به اشیاء به طور اتوماتیک انجام می شود، ولی این مسئله در مورد اشیاء Graphics صادق نیست. بنابر این برای آزاد شدن فضای حافظه اختصاص داده شده به این شیء به صورت زیر عمل می کنیم.public void destroy(){ offscreenGraphics.dispose();}
اسلاید 208: بافرینگ دوگانه :Double Buffering در صورت استفاده از بافرینگ دوگانه ابتدا کل فریم یک انیمیشن را در ناحیه ای نامریی ایجاد می کند و سپس آن را درون پنجره برنامه کپی می کند. برای پیاده سازی بافرینگ دوگانه ابتدا باید تصویر offscreen و محتوای Graphics را در دو متغیر نمونه قرار داد، و سپس آنها را به متد paint() ارسال کرد.Image offscreenImage;Graphics offscreen;سپس در هنگام مقدار دهی اولیه اپلت اشیایی از این دو کلاس ایجاد نموده و آنها را درون متغیرهای نمونه تعریف شده قرار می دهیم.offscreenImage = createImage(size().width, size().height);offscreen = offscreenImage.getGraphics();
اسلاید 209: سپس برای ترسیم تصاویر به روش زیر عمل می کنیم.offscreen.drawImage(bug, 10, 10, this);screen.drawImage(offscreenImage, 0 , 0, this);نکته: می توانید متد update() را override نمایید، تا صفحه نمایش بین دو عمل ترسیم پاک نشود.public void update(Graphics g){ paint(g);}
اسلاید 210: مثال import java.awt.*;public class Checkers extends java.applet.Applet implements Runnable { Thread runner; int xPos = 5; int xMove = 4; Image offscreenImg; Graphics offscreen; public void init() { offscreenImg = createImage(size().width, size().height); offscreen = offscreenImg.getGraphics(); }
اسلاید 211: public void start() { if (runner == null); { runner = new Thread(this); runner.start(); } } public void stop() { runner = null; } public void run() { Thread thisThread = Thread.currentThread(); while (runner == thisThread) { xPos += xMove; if ((xPos > 105) | (xPos < 5)) xMove *= -1;
اسلاید 212: repaint(); try { Thread.sleep(100); } catch (InterruptedException e) { } } } public void update(Graphics screen) { paint(screen); } public void paint(Graphics screen) { // Draw background
اسلاید 213: offscreen.setColor(Color.black); offscreen.fillRect(0,0,100,100); offscreen.setColor(Color.white); offscreen.fillRect(100,0,100,100); // Draw checker offscreen.setColor(Color.red); offscreen.fillOval(xPos,5,90,90); screen.drawImage(offscreenImg, 0, 0, this); } public void destroy() { offscreen.dispose(); }}
اسلاید 214: بارگذاری و پخش از فایلهای صوتیبرای بارگذاری و پخش فایلهای صوتی در اپلتها از متد play() استفاده می شود. متد paly() به دو روش قابل استفاده است.با یک آرگومان(URL فایل صوتی)با دو آرگومان(URL فایل صوتی و مسیر آن)play(getCodeBase(), “zap.au”);نکته: با استفاده از متدهای getDocumentBase() و getCodeBase() به عنوان آرگومان متد play() میتوان مسیر فایل اصلی اپلت را به تابع مذکور ارسال کرد.
اسلاید 215: نکاتبرای پخش مکرر فایل صوتی، start و stop کردن آن یا تعیین دفعات پخش فایل صوتی آن را درون شیء AudioClip قرار می دهیم. انجام این عمل با استفاده از متد getAudioClip() امکان پذیر است. آرگومانهای این متد نیز مانند متد play() می باشد.AudioClip = getAudioClip (getCodeBase(), “audio/marimba.wav”)نکته: در صورتی که بخواهید درون یک Application از فایلهای صوتی استفاده نمائید، باید به صورت زیر عمل کنید AudioClip clip = new AudioClip (audio/marimba.wav ) ;پس ازایجاد شیء AudioClip می توانید آن را با استفاده از متدهای loop(),stop(),play() کنترل کنید
اسلاید 216: مثالimport java.awt.Graphics;import java.applet.AudioClip;public class AudioLoop extends java.applet.Applet implements Runnable { AudioClip bgSound; AudioClip beep; Thread runner; public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } }
اسلاید 217: public void stop() { if (runner != null) { if (bgSound != null) bgSound.stop(); runner = null; } } public void init() { bgSound = getAudioClip(getCodeBase(),loop.au); beep = getAudioClip(getCodeBase(), beep.au); }public void run() { if (bgSound != null) bgSound.loop(); Thread thisThread = Thread.currentThread(); while (runner == thisThread) { try {
اسلاید 218: Thread.sleep(5000); } catch (InterruptedException e) { } if (beep != null) beep.play(); } } public void paint(Graphics screen) { screen.drawString(Playing Sounds ..., 10, 10); }}
اسلاید 219: نکته در صورتی که یک فایل صوتی به صورت مکرر پخش شود .عمل پخش آن با متوقف شدن Thread اپلت متوقف نمی شود. برای حل این مشکل از متد stop() استفاده می نمائیم
اسلاید 220: Awt AWT شامل مجموعه ای از کلاسها برای ایجاد واسط کاربر و دریافت ورودی از طریق mouse و صفحه کلید می باشد. هنگام استفاده از AWT واسط کاربر شامل سه گزینه زیر می باشد:Components: اشیاء مختلفی که می توانند درون واسط کاربر قرار گیرند.Containers: Componentی که شامل Component های دیگر است.:Layout Manager شیئی که نحوه نمایش Componentها را درون Container تعیین می نماید .کلاسهای AWT همگی درون java.awt قرار دارند .
اسلاید 221: افزودن Component ها به Container برای افزودن یک component به یک container به اعمال زیر را انجام می دهیم. ایجاد Componentفراخوانی متد add() کلاس Container با آرگومان Component ایجاد شده.نکته: افزودن یک Component به یک Container موجب نما یش آن نخواهد شد. برای نمایان شدن یک Component باید متد paint() توسط متد repaint() فراخوانی شود.
اسلاید 222: افزودن CommandButtonمثال1:import java.awt.*;public class AudioLoop extends java.applet.Applet { String note = I am extremely tired and would prefer not + to be clicked; Button tired = new Button(note); public void init() { add(tired); }}
اسلاید 223: مثال2:import java.awt.*;public class VCR extends java.applet.Applet { Button rewind = new Button(Rewind); Button play = new Button(Play); Button ff = new Button(Fast Forward); Button stop = new Button(Stop); Button eat = new Button(Eat Tape);public void init() { add(rewind); add(play); add(ff); add(stop); add(eat); }}
اسلاید 224: افزودن Labelنکته: Labelها بلا فاصله پس از ایجاد شدن نمایان خواهند شد ونیازی فراخوانی متد paint() ندارند.مثال : import java.awt.*;public class Labels extends java.applet.Applet { Label lefty = new Label(Bleeding heart!); Label center = new Label(Centrist!, Label.CENTER); Label righty = new Label(Hardliner!, Label.RIGHT); Font lf = new Font(Helvetica, Font.BOLD, 14); GridLayout layout = new GridLayout(3,1);public void init() { setFont(lf); setLayout(layout); add(lefty); add(center); add(righty); }}
اسلاید 225: مثال :import java.awt.*; public class CheckACzech extends java.applet.Applet { Checkbox c1 = new Checkbox(Milos Forman); Checkbox c2 = new Checkbox(Paulina Porizkova); Checkbox c3 = new Checkbox(Ivan Reitman); Checkbox c4 = new Checkbox(Tom Stoppard); Checkbox c5 = new Checkbox(Ivana Trump); public void init() { add(c1); c2.setState(true); add(c2); add(c3); add(c4); add(c5); }}افزودن Checkbox:
اسلاید 226: افزودن RadioButtonمثال: import java.awt.*;public class AudioLoop extends java.applet.Applet { CheckboxGroup p = new CheckboxGroup(); Checkbox p1 = new Checkbox(Samuel Goldwyn, p, false); Checkbox p2 = new Checkbox(Krzysztof Kieslowski, p, true); Checkbox p3 = new Checkbox(Klaus Kinski, p, false); Checkbox p4 = new Checkbox(Joanna Pacula, p, false);
اسلاید 227: Checkbox p5 = new Checkbox(Roman Polanski, p, false); public void init() { add(p1); add(p2); add(p3); add(p4); add(p5);}
اسلاید 228: افزودن ComboBox(ChoiceList)مثال:import java.awt.*;public class SelectASpaniard extends java.applet.Applet { Choice span = new Choice(); public void init() { span.addItem(Pedro Almodóvar); span.addItem(Antonio Banderas); span.addItem(Charo); span.addItem(Xavier Cugat); span.addItem(Julio Iglesias); add(span); }}
اسلاید 229: افزودن TextBox(TextField)مثال:import java.awt.*;public class OutOfSite extends java.applet.Applet { Label siteLabel = new Label(Site Name: ); TextField site = new TextField(25); Label addressLabel = new Label(Site Address: ); TextField address = new TextField(25); Label passwordLabel = new Label(Admin Password: ); TextField password = new TextField(25); public void init() {}
اسلاید 230: add(siteLabel); add(site); add(addressLabel); add(address); add(passwordLabel); password.setEchoCharacter(*); add(password); }
اسلاید 231: افزودن TextAreaمثال:import java.awt.*;public class Virginia extends java.applet.Applet { String letter = Dear Editor:n + I am 8 years old.n +Some of my little friends say there is no Santa Claus. + Papan + says, If you see it in The Sun its so. Please tell + me the truth,n + is there a Santa Claus?nn + Virginia OHanlonn + 115 West 95th Streetn + New York; TextArea lt; public void init() { lt = new TextArea(letter, 10, 50); add(lt); }}
اسلاید 232: افزودن ScrollBar & Sliderمثال:import java.awt.*;public class Slider extends java.applet.Applet { GridLayout gl = new GridLayout(1,1); Scrollbar bar = new Scrollbar(Scrollbar.HORIZONTAL, 50, 0, 1, 100); public void init() { setLayout(gl); add(bar); }}
اسلاید 233: افزودن Canvasمثال:import java.awt.*;public class Crosshair extends java.applet.Applet { GridLayout gl = new GridLayout(1,1); MyCanvas can = new MyCanvas(); public void init() { setLayout(gl); add(can); }}
اسلاید 234: class MyCanvas extends java.awt.Canvas { public void paint(Graphics g) { int x = size().width / 2; int y = size().height / 2; g.setColor(Color.black); g.drawLine(x-10, y, x-2, y); g.drawLine(x+10, y, x+2, y); g.drawLine(x, y-10, x, y-2); g.drawLine(x, y+10, x, y+2); }}
اسلاید 235: تعیین layoutبرای تعیین نحوه ی نمایش componentها در پنجره ی اپلت از Layout استفاده می شود. AWT شامل پنج نوع Layout به شرح زیر می باشد.FlowLayout(default)GridLayoutGridBagLayoutBorderLayoutCardLayoutبرای استفاده از یک Layout ابتدا باید یک شی از نوع آن Layout ایجاد نمود.FlowLayout layout = new FlowLayout();پس از ایجاد Layout با استفاده از متد SetLayout() آن را به عنوان Layout جاری سیستم در نظر می گیریم. پس از تعیین Layout جاری برنامه می توان Componentها را به پنجره Container افزود.
اسلاید 236: FlowLayoutاگر از این Layout استفاده کنید، Componentها پشت سر هم چیده خواهند شد. در صورتی که متد سازنده ی FlowLayout() بدون آرگومان فراخوانی شود. Componentها وسط سطرها درج می شوند. اگر می خواهید Componentها در سمت چپ یا راست درج شوند از آرگومانهای FlowLayout.LEFT یا FlowLayout.RIGHT استفاده کنید.
اسلاید 237: مثال import java.awt.*;public class Alphabet extends java.applet.Applet { Button a = new Button(Alibi); Button b = new Button(Burglar); Button c = new Button(Corpse); Button d = new Button(Deadbeat); Button e = new Button(Evidence); Button f = new Button(Fugitive); FlowLayout lm = new FlowLayout(FlowLayout.LEFT);
اسلاید 238: public void init() { setLayout(lm); add(a); add(b); add(c); add(d); add(e); add(f); }}متد سازنده FlowLayout() در حالت پیش فرض بین هر Component با Component بعدی سه پیکسل فاصله می گذارد (این مسئله در مورد سطرها هم صادق است). در صورتی که بخواهیم فاصله پیش فرض را تغییر دهیم، به صورت زیر عمل می کنیم.FlowLayout layout = new FlowLayout(FlowLayout.LEFT, 10, 30);
اسلاید 239: GridLayout در صورتی که از این Layout استفاده کنید، Componentها به حالت Grid پشت سر هم قرار خواهند گرفت. در صورتی که متد سازنده ی GridLayout() دارای چهار آرگومان می باشد. آرگومان اول بیانگر تعداد سطرها، آرگومان دوم بیانگر تعداد ستونها، آرگومان سوم بیانگر فاصله ی بین Componentها و آرگومان چهارم بیانگر فاصله بین سطرها می باشد.GridLayout gr = new GridLayout(10, 3, 5, 8);نکته: فاصله پیش فرض در GridLayout صفر می باشد.
اسلاید 240: مثال import java.awt.*;public class Bunch extends java.applet.Applet { GridLayout family = new GridLayout(3,3,10,10); Button marcia = new Button(Marcia); Button carol = new Button(Carol); Button greg = new Button(Greg); Button jan = new Button(Jan); Button alice = new Button(Alice); Button peter = new Button(Peter); Button cindy = new Button(Cindy); Button mike = new Button(Mike); Button bobby = new Button(Bobby);
اسلاید 241: public void init() { setLayout(family); add(marcia); add(carol); add(greg); add(jan); add(alice); add(peter); add(cindy); add(mike); add(bobby); }}
اسلاید 242: BorderLayout این Layout، Container را به پنج قسمت شمال، جنوب، شرق، غرب و مرکز تقسیم می کند. متد سازنده این کلاس به دو صورت قابل دسترسی می باشد.بدون آرگومان :در این حالت Componentها بدون فاصله درج خواهند شد.BorderLayout();با دو آرگومان : در این حالت آرگومان اول تعیین کننده فاصله افقی و آرگومان دوم تعیین کننده فاصله عمودی خواهد بود.BorderLayout(int, int);به منظور افزودن یک Component به Container باید به صورت زیر عمل کنیمadd(String, Component)آرگومان اول(String) می تواند دارای یکی از مقادیر North، South، East، West یا Center باشد و بیانگر محل قرار گرفتن Component می باشد .
اسلاید 243: مثال import java.awt.*;public class Border extends java.applet.Applet { BorderLayout b = new BorderLayout(); Button north = new Button(North); Button south = new Button(South); Button east = new Button(East); Button west = new Button(West); Button center = new Button(Center); public void init() { setLayout(b); add(North, north); add(South, south); add(East, east); add(West, west); add(Center, center); }}
اسلاید 244: نکتهدر صورتی که بخواهیم از چند Layoutمتفاوت در یک برنامه استفاده کنیم، باید Containerهای اضافی به Container اصلی (در اینجا پنجره Applet) اضافه کنیم به عنوان مثال می توان از Panelها که برای گروه بندی Componentها به کار می روند استفاده کرد .هنگام استفاده از Panelها به موارد زیر توجه کنید:افزودن Component ها بهPanel قبل از افزودن Panel به Containerبزرگتر باشد.هر Panel دارای Layout جداگانه است.برای ایجاد یک شی Panel به صورت زیر عمل می کنیم.Panel pane = new Panel(); و برای تعیین Layout یک Panel از قطعه کد زیر استفاده می کنیم.BorderLayout bo = new BorderLayout(); pane.setLayout (bo); توجه داشته باشید Componentهایی که به Panelها می افزاییم، درون Container های دیگر نظیر Appletها هم قابل دسترسی هستند. برای افزودن یک Component به Panel به صورت زیر عمل می کنیم.pane.add(dialogue);
اسلاید 245: CardLayout این Layoutشامل تعدادی Container یا Component می باشد ، که در یک لحظه فقط یکی از آنها قابل رویت است . روش معمولی برای استفاده از CardLayout استفاده از یک Panel برای هر کارت می باشد. Componentها به Panelاول اضافه می کنیم و سپس Panel به Container اضافه می شود. برای ایجاد یک شی CardLayout به صورت زیر عمل می کنیم :CardLayout cc = new CardLayout (); متد زیر برای تعیین این Layout به عنوان Layout جاری سیستم استفاده می شود .setLayout (cc);
اسلاید 246: برای افزودن card ها از متد add استفاده می کنیم .add (String, Component); add( String, Container) نکته: قبل از افزودن یک (card)Container باید تمام Componentهای لازم به آن add شود. بعد از افزودن Containerها برای نمایش هرکدام می توان ازمتد show() استفاده کرد .این متد دارای دو آرگومان به شرح زیر می باشد.Container شامل تمام کارت ها.در صورتی که Container مذکور Applet باشد می توان از کلمه کلیدی this استفاده کرد.نام کارت
اسلاید 247: import java.awt.*;public class BurmaShave extends java.applet.Applet implements Runnable { CardLayout card = new CardLayout(); Label[] lab = new Label[6]; int current = 0; Thread runner; public void start() { if (runner == null) { runner = new Thread(this); runner.start(); } } public void stop() { runner = null; }مثال
اسلاید 248: public void init() { lab[0] = new Label(Grandpas beard); lab[1] = new Label(Was stiff and coarse.); lab[2] = new Label(And thats what caused); lab[3] = new Label(His fifth); lab[4] = new Label(Divorce.); lab[5] = new Label(Burma Shave.); setLayout(card); for (int i = 0; i < 6; i++) add(Card + i, lab[i]); }
اسلاید 249: public void run() { Thread thisThread = Thread.currentThread(); while (runner == thisThread) { card.show(this, Card + current); current++; if (current > 5) current = 0; repaint(); try { Thread.sleep(5000); } catch (InterruptedException e) { } } }}
اسلاید 250: GridBagLayoutتفاوت این GridLayout Layout به شرح زیر است :یک Component می تواند بیش از یک سلول درونGrid را اشغال کند.فاصله بین خطوط یا Componentها می تواند متفاوت باشد.Componentها را می توان به طرق مختلف درون Grid قرار داد.برای ایجاد GridBagLayout از کلاسهای GridBagConstraintو GridBagLayout استفاده می شود.کلاس GridBagConstraint برای تعیین مشخصات Componentهای درون Grid استفاده می شود.در حالت کلی ایجاد Grid Bag Layout شامل مراحل زیر است:ایجاد شیء GridBagLayout و تعیین آن به عنوان Layout جاری سیستم.ایجاد شیء GridBagConstraintتعیین constraintهای هر Componentاعمال constraintهای هر Component به Layout افزودن Component به Constraint
اسلاید 251: قدم اول: طراحی Grid قبل از شروع کد نویسی Grid مورد نظر خود را روی کاغذ ترسیم کنید.قدم دوم: ایجاد Gridبرای ایجاد Grid ابتدا متد buildConstraint فراخوانی می شود، این متد دارای هفت آرگومان می باشد عملکرد این متد به صورت زیر است.void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) { gbc.gridx = gx; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; }
اسلاید 252: متد init() اپلت را به صورت زیر override می کنیم.public void init() { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); setLayout(gridbag); // Name label buildConstraints(constraints, 0, 0, 1, 1, 100, 100); constraints.fill = GridBagConstraints.BOTH; Button label1 = new Button(Name:); gridbag.setConstraints(label1, constraints); add(label1);}
اسلاید 253: بعد از اختصاص Constraints به یک Component می توان از شیء GridBagConstraints برای اختصاص Constraintsهای Componentهای دیگر استفاده کرد.در مجموع باید 4 بار دیگر از متد buildConstraint( ) به صورت زیر استفاده کنیم buildConstraints(constraints, 1, 0, 1, 1, 100, 100);buildConstraints)constraints,0, 1, 1, 1, 100, 100);buildConstraints)constraints, 1, 1, 1, 1, 100, 100);buildConstraints)constraints, 0, 2, 2, 1, 100, 100); قدم سوم: تعیین ابعاد قدم بعدی تعیین ابعاد سطرها وستونها می باشد. برای مثل ممکن است بخواهید قسمت Password, user name ابعاد کمتری نسبت به textbox داشته باشند و دکمه ok ارتفاع کمتری نسبت به textbox ها داشته باشد تععن ابعاد به کمک مشخصه های weighty, weightx انجام می شود.
اسلاید 254: نکتهمجموع مشخصه هایweightx وweighty باید 100 شود.به متد های buildConstraints ( ) که قبلاٌ ایجاد کردیم، توجه کنید.buildConstraints(constraints, 0, 0, 1, 1, 100, 100);buildConstraints(constraints, 1, 0, 1, 1, 100, 100);buildConstraints)constraints, 0, 1, 1, 1, 100, 100);buildConstraints)constraints, 1, 1, 1, 1, 100, 100);buildConstraints)constraints, 0, 2, 2, 1, 100, 100); حال تغییرات لازم را به مشخصه weightx اعمال می کنیم BuildConstraints(constraints, 0, 0, 1, 1, 10, 100);//nameBuildConstraints(constraints, 1, 0, 1, 1, 90, 100);//nameTextبه دلیل اینکه سهم هر Component مشخص شد در متدهای بعدی جای تعیین سهم عدد صفر منظور می شود .
اسلاید 255: قدم جهارم: افزودن وتنظیم Componentهابرای انجام این عمل یکی از چهار مقدار زیر را به کلاس fill نسبت داده می شود.Component :GridBagConstraints.BOTH رادرهردوجهت(ارتفاع وعرض) گسترش می دهد، تا تمام سلول ها را پر نماید. GridBagConstraints.NONE: باعث می شود تا Component با کوچکترین اندازه ممکن نشان داده شود.GridBagConstraints.HORIZONTAL: گسترش Componentدر امتداد افقی انجام می شود.GridBagConstraints.VERTICAL : گسترش Componentدر امتداد عمودی انجام می شود.
اسلاید 256: نکته مقدار پیش فرض این مشخصه GridBagConstraints.NONE می باشد.برایComponent هایی که تمام سلول را اشغال نکرده مقادیر دیگری به شرح زیر موجوداست .این مقادیر مشخصه anchorنسبت داده می شوند. این مقادیر موقعیت قرار گرفتن Componentرا درون سلول مشخص می کند.GridBagConstraints.NORTH GridBagConstraints.NORTHEASTGridBagConstraints.SOUTH GridBagConstraints.SOUTHEASTGridBagConstraints.EAST GridBagConstraints.NORTHWESTGridBagConstraints.WEST GridBagConstraints.SOUTHWESTمقدار پیش فرض این مشخصه GridBagConstraint.CENTER می باشد.
اسلاید 257: اعمال تنظیمات import java.awt.*;public class NamePass extends java.applet.Applet { void buildConstraints(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy) { gbc.gridx = gx; gbc.gridy = gy; gbc.gridwidth = gw; gbc.gridheight = gh; gbc.weightx = wx; gbc.weighty = wy; }
اسلاید 258: public void init() { GridBagLayout gridbag = new GridBagLayout(); GridBagConstraints constraints = new GridBagConstraints(); setLayout(gridbag); // Name label buildConstraints(constraints, 0, 0, 1, 1, 10, 40); constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.EAST; Label label1 = new Label(Name:, Label.LEFT); gridbag.setConstraints(label1, constraints); add(label1); // Name text field buildConstraints(constraints, 1, 0, 1, 1, 90, 0); constraints.fill = GridBagConstraints.HORIZONTAL; TextField tfname = new TextField();
اسلاید 259: gridbag.setConstraints(tfname, constraints); add(tfname); // password label buildConstraints(constraints, 0, 1, 1, 1, 0, 40); constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.EAST; Label label2 = new Label(Password:, Label.LEFT); gridbag.setConstraints(label2, constraints); add(label2); // password text field buildConstraints(constraints, 1, 1, 1, 1, 0, 0); constraints.fill = GridBagConstraints.HORIZONTAL; TextField tfpass = new TextField();
اسلاید 260: tfpass.setEchoCharacter(*); gridbag.setConstraints(tfpass, constraints); add(tfpass); // OK Button buildConstraints(constraints, 0, 2, 2, 1, 0, 20); constraints.fill = GridBagConstraints.NONE; constraints.anchor = GridBagConstraints.CENTER; Button okb = new Button(OK); gridbag.setConstraints(okb, constraints); add(okb); }}
اسلاید 261: مدیریت رویداد : Event Handingبرای تعامل با واسط کاربر باید رویدادهارا به دسترسی مدیریت نماییم.رویداد ها بسته به عمل کاربر سیستم تولید می شوند.
اسلاید 262: انواع رویداد : Types of Eventsرویداد کلیک Mouse: این رویداد به نوع خود شامل انواع MouseDown(فشردن دکمه mouse)، MouseUp(رها کردن دکمه mouse) MouseClicked(فشردن ورها کردن دکمه mouse) می باشد.رویداد حرکت (Mouse Movement)Mouse: این رویداد به نوبه خود شامل انواع ورود و خروج مکان نمای mouse به واسط Component و mouse dard می باشد. فشردن دکمه های صفحه کلید(Keypresses): این رویداد به نوبه خود شامل فشردن دکمه های صفحه کلید، رها کردن دکمه های صفحه کلید و فشردن و رها کردن دکمه های صفحه کلید می باشد.رویدادهای واسط کاربر (User Interface Events): این رویداد به نوبه خود شامل کلیک دکمه(Button Click)، تغییر وضعیت (Scrollbar Up and Down)Scrollbar ظاهر شدن منوی (popup menuts) popup و ... می باشد .
اسلاید 263: مدیریت رویداد کلیک Mouseیکی از معمولترین رویداد ها کلیک Mouse می باشد.1 ) رویداد MouseDown و MouseUp: وقتی کاربر روی mouse کلیک می کند، دو رویداد به وقوع می پیوندد. این دو رویداد عبارتند از:mouseDown (وقتی دکمه فشرده می شود) و mouseUp(زمانی که دکمه رها می شود) مدیریت رویدادها از طریق override کردن متدهای مربوط به رخدادها انجام می شود. برای مثال به متد زیر توجه کنید.public boolean mouseDown(Event evt, int x, int y){ //Method’s Core Comes here} همان طور که ملاحظه می کنید متدهای mouseDown() و mouseUp() دارای سه آرگومان به شرح زیر می باشد.Event eve: این آرگومان شیء از کلاس Event است که حاوی رویداد مربوطه است.int x و int y: این دو آرگومان مختصات نقطه وقوع رویداد را در خود نگه می دارند.
اسلاید 264: مثالpublic boolean mouseDown(Event evt, int x, int y){ System.out.println(“Mouse down at” + x + “,” + y);}
اسلاید 265: 2 ) رویداد MouseUp: نیمه دیگر کلیک متد mouseUp() می باشد این متد زمانی که دکمه mouse رها می شود، فراخوانی می گردد. برای مدیریت رویداد mouseUp باید متد mouseUp() را override کنیم.public boolean mouseUp(Event evt, int x, int y){ //Method’s Core Comes here}
اسلاید 266: مثال import java.awt.Graphics;import java.awt.Color;import java.awt.Event;public class Spots extends java.applet.Applet { final int MAXSPOTS = 10; int xspots[] = new int[MAXSPOTS]; int yspots[] = new int[MAXSPOTS]; int currspots = 0; public void init() { setBackground(Color.white); }
اسلاید 267: public boolean mouseDown(Event evt, int x, int y) { if (currspots < MAXSPOTS) { addspot(x,y); return true; } else { System.out.println(Too many spots.); return false; } } void addspot(int x,int y) { xspots[currspots] = x; yspots[currspots] = y; currspots++; repaint(); }
اسلاید 268: public void paint(Graphics g) { g.setColor(Color.blue); for (int i = 0; i < currspots; i++) { g.fillOval(xspots[i] - 10, yspots[i] - 10, 20, 20); } }}
اسلاید 269: مدیریت رویداد Double Clickبرای کنترل تعداد کلیک mouse به این صورت عمل می کنیم.public boolean mouseDown(Event evt, int x, int y) { switch(evt.clickCount){ case1://Single click case2://Double click case3://Triple click //…}مثال:public boolean mouseDown(Event evt, int x, int y){ System.out.println(“Click count:” + evt.clickCount);}
اسلاید 270: مدیریت رویداد جابجایی Mouseمدیریت رویداد جابجایی Mouse: هرگاه mouse جابجا می شود، دو رویداد متفاوت به وقوع می پیوندد.MouseDrag: جابجایی mouse در حالتی که دکمه mouse فشرده شده است.public boolean mouseDrag(Event evt, int x, int y){ //Method’s Core Comes Here}mouseMove: جابجایی mouse بدون اینکه دکنه آن فشرده شده باشد.public boolean mouseMove(Event evt, int x, int y){ //Method’s Core Comes Here}توجه داشته باشید که آرگومانهای x و y متدهای mouseMove و mouseDrag مختصات موقعیت نهایی مکان نمایmouse را در خود نگه می دارند.
اسلاید 271: MouseEnter: با ورود مکان نمای mouse به پنجره ی اپلت متد مربوط به این رویداد فراخوانی می شود.public boolean mouseEnter(Event evt, int x, int y){ //Method’s Core Comes Here}MouseExit : با ورود مکان نمای mouse به پنجره ی اپلت متد مربوط به این رویداد فراخوانی می شود.public boolean mouseExit(Event evt, int x, int y){ //Method’s Core Comes Here}
اسلاید 272: مثالimport java.awt.Graphics;import java.awt.Color;import java.awt.Event;import java.awt.Point;public class Lines extends java.applet.Applet { final int MAXLINES = 10; Point starts[] = new Point[MAXLINES]; // starting points Point ends[] = new Point[MAXLINES]; // ending points Point anchor; // start of current line Point currentpoint; // current end of line int currline = 0; // number of lines public void init() { setBackground(Color.white); }
اسلاید 273: public boolean mouseDown(Event evt, int x, int y) { if (currline < MAXLINES) { anchor = new Point(x,y); return true; } else { System.out.println(Too many lines.); return false; } }public boolean mouseUp(Event evt, int x, int y) { if (currline < MAXLINES) { addline(x,y); return true; } else return false; }
اسلاید 274: public boolean mouseDrag(Event evt, int x, int y) { if (currline < MAXLINES) { currentpoint = new Point(x,y); repaint(); return true; } else return false; } void addline(int x,int y) { starts[currline] = anchor; ends[currline] = new Point(x,y); currline++; currentpoint = null; anchor = null; repaint(); }
اسلاید 275: public void paint(Graphics g) { // Draw existing lines for (int i = 0; i < currline; i++) { g.drawLine(starts[i].x, starts[i].y, ends[i].x, ends[i].y); } // draw current line g.setColor(Color.blue); if (currentpoint != null) g.drawLine(anchor.x,anchor.y, currentpoint.x,currentpoint.y); }}
اسلاید 276: مدیریت رویدادهای صفحه کلیدبرای اینکه یک Component بتواند رویدادهای صفحه کلید را دریافت کند، باید getFocus شده باشد. به عبارت دیگر Component مذکور باید Componentی باشد که برای دریافت وروردی انتخاب شده است.نکته: برای تعیین Componentی که focus را در اختیار دارد، از متد زیر استفاده می کنیم.Component.requestFocus();
اسلاید 277: رویدادهای keyDown و keyUpبرای مدیریت این رویدادها از متدهای زیر استفاده می کنیم.public boolean keyDown(Event evt, int key){ //Method’s Core Comes Here }public boolean keyDown(Event evt, int key){ //Method’s Core Comes Here }آرگومان دوم متد فوق(key) عدد صحیح حاوی مقادیر کاراکتری یونیکد می باشد. برای استفاده از آنها به عنوان کاراکتر به صورت زیر عمل می کنیم.currentChar = (char)key;
اسلاید 278: نکات و مثالpublic boolean keyDown(Event evt, int key){ System.out.println(“Ascii Value: ” + key); System.out.println(“Character:” + (char)key); return true;}نکته: برخی از کلیدهای غیر کاراکتری نظیر کلیدهای جهت دارای نام می باشند که می توان برای دسترسی به آنها از این نامها استفاده کرد.if(key == Event.UP){ //If Core Comes Here}
اسلاید 279: مثالimport java.awt.Graphics;import java.awt.Event;import java.awt.Font;import java.awt.Color;public class Keys extends java.applet.Applet { char currkey; int currx; int curry; public void init() { currx = (size().width / 2) -8; // default curry = (size().height / 2) -16; setBackground(Color.white); setFont(new Font(Helvetica,Font.BOLD,36)); requestFocus(); }
اسلاید 280: public boolean keyDown(Event evt, int key) { switch (key) { case Event.DOWN: curry += 5; break; case Event.UP: curry -= 5; break; case Event.LEFT: currx -= 5; break; case Event.RIGHT: currx += 5; break;
اسلاید 281: default: currkey = (char)key; } repaint(); return true; } public void paint(Graphics g) { if (currkey != 0) { g.drawString(String.valueOf(currkey), currx,curry); } }}
اسلاید 282: نکاتی دیگر در مورد زبان برنامه نویسی Java
خرید پاورپوینت توسط کلیه کارتهای شتاب امکانپذیر است و بلافاصله پس از خرید، لینک دانلود پاورپوینت در اختیار شما قرار خواهد گرفت.
در صورت عدم رضایت سفارش برگشت و وجه به حساب شما برگشت داده خواهد شد.
در صورت نیاز با شماره 09353405883 در واتساپ، ایتا و روبیکا تماس بگیرید.
- پاورپوینتهای مشابه
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.