menusearch
javapro.ir

♨️ جلسه ششم - آموزش ساخت برنامه نمایش عکس در جاوا

جستجو
چهارشنبه ۲۲ آبان ۱۳۹۸ | ۱۸:۴۰:۳۹
۱۳۹۸/۵/۱۲ شنبه
(1)
(0)
♨️ جلسه ششم - آموزش ساخت برنامه نمایش عکس در جاوا
♨️ جلسه ششم - آموزش ساخت برنامه نمایش عکس در جاوا

به نام خدا


سلام دوست من، در جلسات گذشته در مورد درک و استخراج مفاهیم جاوا یک مسئله و با محیط و امکانات برنامه Netbeans برای طراحی ظاهر گرافیکی یک برنامه ویندوزی آشنا شدیم و توانستیم ظاهر گرافیکی پروژه برنامه نمایش عکس در جاوا را طراحی کنیم. تصویر(1)

 

 

 

دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
 

 

خب ممکنه براتون سوال پیش بیاد که چرا ظاهر گرافیکی برنامه چندان زیبا نیست؟بله حق با شما است با وجود این که با اضاف کردن image ها به دکمه ها ، فریم و پنل برنامه باز ظاهر برنامه اون ظاهر زیبا و مدرنی که برنامه های امروزی دارند را ندارد! دلیلشم اینه که ما داریم از کتابخانه گرافیکی Swing در جاوا استفاده می کنیم و این کتابخانه تقریبا قدیمی شده است! و در حال حاضر JAVAFX جایگزین Swing در جاوا شده است که برنامه هایی با ظاهر گرافیکی شیک و مدرنی را می توانید از طریق آن طراحی کنید. خب چرا Swing رو دارید آموزش می دید؟! چون در دانشگاه هنوز هم دانشجویان برای تحویل پروژه گرافیکی جاوای خود از Swing استفاده می کنند و برای این که دانشجوها مجبور نباشند چند صد هزار تومن! پول بدهند براشون بیرون پروژه شون رو بنویسند تصمیم به آموزش Swing به صورت پروژه محور گرفتیم. اما این را بدانید که مهم یادگیری الگوریتم پیاده سازی یک پروژه برنامه نویسی هست و بعدش با هر کتابخانه ای  مثل javafx می تونید با گرافیک بهتری ظاهر برنامه را طراحی کنید وگرنه عملیاتی که برنامه برامون انجام میده هیچ فرقی نمیکند که از Swing یا Javafx استفاده کنیم.

 

خب بگذریم.... ظاهر گرافیکی برنامه رو طراحی کردیم حالا میریم سراغ کدنویسی کارایی که صورت مسئله ازمون خواسته است.
ما در جلسه دوم صورت مسئله را بررسی کردیم و مفاهیم مورد نیاز برای ساخت برنامه نمایش عکس در جاوا را استخراج کردیم.
صورت مسئله به صورت زیر است: تصویر(2)

 


دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
نکته :جلسه دوم آموزش پروژه محور نمایش عکس در جاوا را قبلش یک مروری کنید که یادتون بیاد چه مفاهیمی را استخراج کردیم.
طبق برداشتی که از مسئله داشتیم این بود که ما یک کلاس با نام عکس داریم که ویژگی ها و رفتارهای خاص خودش را داشت.
پس در برنامه netbeans و در بخش پروژمون که اسمش view photo بود و در پکیج photo.view قصد داریم یک کلاس با نام picture ایجاد کنیم. برای این کار روی پکیج photo.view کلیک سمت راست می کنیم و از بخش New گزینه Java Class… را انتخاب می کنیم: تصویر(3)

 

 

 

 

دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا

 

 

و بعد مطابق با تصویر(4) اسم کلاس خود را "Picture" انتخاب می کنیم :

 

 

 


دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا

 

 

بعد کارایی که در تصاویر(3) و (4) برای ایجاد یک کلاس ایجاد کردیم نتیجه به صورت تصویر(5) خواهد بود:

 

 

 

 

دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
 

✔ همان طور که در تصویر(5) مشاهده می کنید یک کلاس با نام Picture ایجاد کردیم که درون پکیج view.photo قرار گرفته است.


✔ دوستان من دیگه تصویر کدها رو براتون قرار میدم و برای دسرسی به سورس کدهایی که در هر جلسه آموزشی بررسی می کنیم به صورت جداگانه در کنار پی دی اف آموزشی براتون به اشتراک می گذارم. یعنی فایل آموزشی هر جلسه شامل یک پی دی اف + یک فلودر سورس کدی است که در ان جلسه اموزش داده ام...اگر داری این پی دی اف آموزشی را میخوانی و دسرسی به فولدر سورس کد آن نداری کافی که از سایت javapro.ir از بخش جاوا و آموزش پروژه محور آن را دانلود کنید.

 

حالا برای کلاس Picture قصد داریم سه ویژگی زیر را فعلا تعریف کنیم:


•    عرض (width)
•    ارتفاع(height)
•    تصویر(image)


خب تا اینجا کلاس Picture ما به صورت زیر خواهد بود: تصویر(6)

 

 


دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
✔ خب ما قراره از کامپیوتر تعدادی عکس بگیریم و در برنامه مون نمایش بدهیم. پس نیاز به یک کلاس داریم که با شی ساختن از آن بتوانیم عکس های خوانده شده از کامپیوتر را درون شی آن بریزیم. نگران نباشید جلوتر متوجه میشید چه اتفاقی قراره بیفته 😃

 


توضیحات تصویر(6)


✔ خط 9 تا 10 پکیج های مورد نیاز برای استفاده از Arraylist و BufferedImage در کلاسمون را import کرده ایم.


✔ BufferedImage چیست؟  BufferedImage کلاسی است که برای خواندن فایل تصویری از آن استفاده می کنیم.


✔ خط 17 عرض عکس و خط 18 ارتفاع عکس و خط 19 لیست فایل های تصویری که از کامپیوتر میخوانیم یا همون عکسامون را در خود ذخیره می کند.

 

✔ خب ما میخوایم اندازه همه عکس هامون یک مقدار ثابت غیر قابل تغییر باشد به همین خاطر در خط 17 و 18 متغیرهای width و height را مقداردهی اولیه کرده و از نوع final تعریف کرده ایم.


✔ امکان داره جلوتر نیاز داشته باشیم ویژگی یا متدی را به کلاس Picture اضاف یا کم کنیم فعلا تا اینجا دست نگه می داریم و سراغ کلاس MainClass برنامه مون میریم . روی MainClass.java دابل کلیک می کنیم تا باز شود و بعد از بخش Source وارد سورس کد آن می شویم. تصویر(7)

 

 

 

 

دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
 

✔ تصویر(7) بخشی از کدهای موجود در کلاس MainClass را نمایش میدهد،باز تاکید می کنم تمام سورس کدهای هر جلسه آموزشی را در فولدری جداگانه در کنار پی دی اف اموزش برای شما قرار دادم تا بتوانید به راحتی آنها را Run کنید.

 

✔ خب به صورت مسئله بازگردیم،در صورت مسئله گفته شده از طریق منو open عکس های خود را از محلی ازکامپیوتر بخوانید و درون برنامه نمایش دهید. برای این کار در بدنه کلاس MainClass  دستوراتی را تعریف می کنیم که عکس هامون را از کامپیوتر بخواند.

 

✔ ابتدا باید دستوراتی وجود داشته باشد که با زدن آیتم منو open  یک FileChooser باز شود و از طریق آن بتوان عکس هامون را در کامپیوتر پیدا کنیم و آنها را بخوانیم. برای این کار یک متد با نام getPathImageFile در بدنه کلاس MainClass تعریف می کنیم و دستوراتی را برای آن می نویسیم: تصویر(8)

 

 

دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
 

 

توضیحات تصویر(8):


کار متد getPathImageFile چیست؟ این متد یک FileChooser ایجاد می کند که از طریق آن می توان فایل های خود را از کامپیوتر پیدا کرده و بخوانیم. چیزی شبیه تصویر(9)

 

 

 

 

آموزش پروژه محور جاوا
 

💠 کاربرد دستور موجود در خط 37 تصویر(8) چیست؟

 

fc.setMultiselectionEnabled(true);


✔ اگر در جاوا قصد گرفتن بیش از یک فایل از کامپیوتر را داشته باشید مقدار این دستور را باید true بگذارید.

💠 کاربرد دستور موجود در خط 38 تصویر(8) چیست؟

 

int i = fc.showOpenDialog(this);


✔ برای استفاده از عملیات open  در FileChooser از این دستور استفاده می کنیم.

 

💠 کاربرد دستور موجود در خط 40 تصویر(8) چیست؟

 

File[] f = fc.getselectedFiles();


✔ با دستور فوق فایل هایی که از کامپیوتر را انتخاب کردیم درون آرایه ای از نوع File می ریزیم. لازم به ذکر است فایل از هر نوعی می تواند باشد. که در این برنامه قراره فایل های تصویری را دریافت کنیم.

 

💠 کاربرد دستور موجود در خط 42 تصویر(8) چیست؟


 ✔  خب متد به گونه ای تعریف شده است که یک مقداری را برمی گرداند و این مقدار از نوع آرایه ای از نوع File می باشد.

 

 💡 تا اینجا در کلاس MainClass متدی را تعریف کردیم که کار گرفتن و خواندن فایل هامون رو از کامپیوتر انجام میده حالا سراغ دستوراتی می رویم که  فایل های تصویری خونده شده از کامپیوتر رو در یک لیستی از تصاویر موجود در کلاس Picture ذخیره کند. تصویر(10)

 

 

 


آموزش پروژه محوز زبان جاوا
 

 

بررسی تصویر(10) و متد readImage:


💡 توضیح کلی در مورد کاربرد متد readImage : کار این متد ایجاد لیستی از فایل های تصویری برای ذخیره فایل های تصویری خوانده شده از کامپیوتر می باشد. به عبارت دیگر فایل هایی تصویری یا همون عکس هامون رو که از طریق متد getPathImageFile از کامپیوتر می خوانیم را دونه به دونه در خانه های لیست مون ذخیره می کنیم.


💠 در خط 49 دستور زیر را داریم:

 

pic.image=new ArrayList<BufferedImage>();


✔ شی pic چیه و از کجا اومده؟ شی pic از نوع کلاس Picture می باشد. ما در بدنه کلاس MainClass از کلاس Picture یک شی با نام pic ایجاد کرده ایم. تصویر(11)

 

 

 


دوره آموزش رایگان پروژه محور زبان برنامه نویسی جاوا
 

 

✔ در تصویر(11) در خط 24 در بدنه کلاس MainClass از کلاس Picture یک شی با نام pic ایجاد کرده ایم، چرا؟ ما قصد داریم فایل های تصویری که از کامپیوتر می خوانیم در لیست تصویری موجود در کلاس Picture ذخیره کنیم.به همین دلیل نیاز به ساخت یک شی از نوع کلاس Picture داریم که از طریق اون به لیست تصویری موجود در کلاس Picture دسرسی داشته باشیم.


💠  برگردیم به خط 49 موجود در تصویر(10):

 

pic.image=new ArrayList<BufferedImage>();


✔ خب با شی pic که حالا میدونیم از کجا اومده شی image که از ArrayListاز نوع BufferedImage می باشد و در کلاس Picture واقع شده را صدا می زنیم و سمت راست مساوی با صدا زدن کلمه کلیدی new و سازنده ArrayList از نوع BufferedImage یک لیست image می سازیم که توانایی ذخیره هر تعداد فایل تصویری را خواهد داشت. چرا از ArrayList استفاده کردیم و از آرایه استفاده نکردیم؟ زیرا ما نمی دونیم کاربر چه تعداد فایل تصویری قراره از کامپیوتر بخواند به همین دلیل بهترین ساختمان داده برای ذخیره فایل های تصویری خوانده شده از کامپیوتر که تعدادشون را نمی دانیم کلاس ArrayList می باشد.


بررسی خط 52 موجود در تصویر(2):

 

BufferedImage im = null;


✔ یک شی از کلاس BufferedImage تعریف کرده و مقداردهی اولیه null کردیم. این شی قراره فایل های تصویری مون رو تک به تک داخلش بریزیم.


💠  بررسی خط 53 موجود در تصویر(10):

 

File[] files=getPathImageFile();


✔ همان طور که می دانید متد getPathImageFile فایل هامون رو از کامپیوتر میخواند و در نهایت همه فایل های خوانده شده را در قالب آرایه ای از نوع File بهمون برمیگرداند و ما این فایل هایی که بهمون پس میده را در یک ارایه ای از نوع File ذخیره می کنیم.


💠  بررسی خط 55 تا 64 موجود در تصویر(10):

 

for(int j=0;j<files.length;j++){
                 try {
im = ImageIO.read(new File(files[j].getPath()));

pic.image.add(im);

                    
} catch (IOException e) {
e.printStackTrace();
}

 

✔ همان طور که می دانید ما فایل هایی که از کامپیوتر خواندیم را درون آرایه ای با نام files که از نوع کلاس Fileهست ذخیره کردیم.
✔ دستور ImageIO.read کارش به صورت تخصصی خوندن فایل های تصویری از محلی از کامپیوتر است.

 


✔ ما فایل هامون رو از کامپیوتر خواندیم اما این فایل های خوانده شده با وجودی که تصویری است برای نمایش در برنامه بکارمون نمیاد! چرا؟! چون ما فایل هایی که از نوع  BufferedImage  هستند را میتونیم روشون کار کنیم و مثلا در برنامه نمایش بدیم و نمی تونیم فایل هایی که از نوع کلاس File هستند با وجود تصویری بودنشان در برنامه نمایش بدهیم. چرا؟ چون اشیا از نوع File را نمی توان به اشیا از نوع  BufferedImage تبدیل کرد. ما از طریق متد getPathImageFile تنها می توانیم فایل های موجود در کامپیوترمون را در قالب نوع کلاس File یعنی با هر نوع فرمتی که باشه بخوانیم.


✔ حالا در متد readImage قصد داریم تک به تک به ادرس فایل هایی که از کامپیوتر خواندیم دسرسی پیدا کنیم و با دستور ImageIO.read تک به تک فایل های تصویری مون رو دوباره بخوانیم و توی شی از نوع کلاس BufferedImage بریزیم.


✔ با یک حلقه for خانه های آرایه files را پیمایش می کنیم و به تک به تک فایل هایی که از کامپیوتر خواندیم دسرسی پیدا می کنیم.

 

im = ImageIO.read(new File(files[j].getPath()));


✔ متد getPath آدرس محل کامپیوتری هر فایل ذخیره شده در آرایه files را به ما برمی گرداند. و مقدار داده شده را ما در شی جدیدی که از نوع کلاس File که new شده است میریزیم. و حالا از طریق دستور  ImageIO.read فایل تصویری مون رو از کامپیوتر میخوانیم و درون شی im که از نوع کلاس BufferedImage است میریزیم.

 

pic.image.add(im);


✔ حالا تک به تک فایل های تصویری که از نوع BufferedImage است را در ArrayList مون که نامش image است ذخیره می کنیم.


✔ از دستور try-catch برای کنترل استثناهای احتمالی مربوط به خواندن فایل هامون استفاده کردیم.


نتیجه گیری کلی در مورد متد های getPathImageFile و readImage :


شاید توضیحات من گیج کننده باشه در بالا اما در کل هدف از این دو متد این است که


1.    از طریق اون فایل هامون رو به صورت دستی از کامپیوتر انتخاب کنیم کاربرد منو open
2.    بعد حالا فایل هایی که از کامپیوتر خواندیم را آدرس هاشون رو به دست بیاریم که کجای کامپیوتر قرار دارند.
3.    بعد حالا از طریق آدرس های به دست آمده از فایل ها دوباره با دستوری که کارش خوندن فایل های تصویری است فایل های تصویری خود را بخوانیم
4.    در نهایت فایل های تصویری خوانده شده خود را به لیست تصاویر خود اضاف کنیم.

این جلسه آموزشی تا اینجا کافیه، سورس کدهای این جلسه آموزشی رو در کنار پی دی اف براتون به اشتراک گذاشته ام.اگه الان داری این کتابو میخونی و نمی دونی سورس کدش کجاست  اینجا کلیک کن و به جلسه شش آموزش پروژه محور برنامه نمایش عکس در جاوا سر بزن.


دوست من آرزوی سعادت و کامیابی رو برات دارم،خدانگهدار


 این جلسه آموزشی را می توانید بصورت  کتاب الکترونیکی (PDF شده) در لینک زیر دریافت کنید.
این جلسه آموزشی را بصورت کامل و مرتب شده در لینک زیر دانلود کنید:(در صورت خرابی لینک گزارش دهید)

 

 

کانال تلگرام آموزش جاوا

 

 

دانلود رایگان کتاب اموزش زبان برنامه نویسی جاوا

لینک دانلود کتاب + سورس کد این جلسه آموزشی

 

 


نشر این مطلب با ذکر منبع (لینک سایت) بلامانع است.
برای با خبر شدن از جدیدترین مطالب آموزشی جاوا 
عضو کانال تلگرام ما شوید.

 

نظرات کاربران
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

بستن
*نام و نام خانوادگی
* پست الکترونیک
* متن پیام

0 نظر
شرکت سازنده