با سوئینگ خداحافظی کنید
با انتشار جاوا 8 قابلیتهای بسیاری به اکوسیستم جاوا افزوده شد که یکی از آنها JavaFX بود که به صورت رسمی نسخه 8 آن جزوی از JDK/JRE معرفی شد. JavaFX یک بستر و چارچوبی برای توسعه اپلیکیشنهای گرافیکی است و جایگزینی برای تکنولوژیهای مردهای همچون Swing و AWT محسوب میشود. هرچند این مقاله قرار نیست آموزش قدم به قدمی برای یادگیری JavaFX باشد، اما با چند مثال ویژگیهای این بستر جدید برای توسعه اپلیکیشنهای گرافیکی، که البته فقط به اپلیکیشنهای دسکتاپ محدود نمیشوند را بررسی میکنیم و نشان میدهیم چرا وقت آن رسیده که با Swing خداحافظی کنید و به JavaFX سلام کنید. حتی اگر محصولات خود را بر بسترهای وب توسعه میدهید، بد نیست از وجود چنین بستری آگاه باشید و به استفاده از آن برای توسعه و توزیع محصولات خود فکر کنید.
معماری سادهتر:
کار کردن با Swing چندان راحت نیست. کدهای جاوای زیادی فقط برای تنظیمات ظاهری و مکان قرار گیری اجزای گرافیکی نوشته می شدند (تولید می شدند) که حجم برنامهها را بسیار زیاد میکرد. در زبانها و پلتفرمهای دیگر این کار به سادگی با جدا کردن گرافیک از کد منطق برنامه انجام میشود، مثل اندروید ( فایل xml) یا سی شارپ ( فایل yaml)، که در این فایلها کدهای گرافیکی در قالب فرمتهای xml مانندی تعریف میشوند و در صورت نیاز به تنظیمات پویاتر، با استفاده از کد این رفتارهای پویا پیادهسازی میشوند. عدم وجود چنین ویژگیای باعث نوشتن هزاران خط کد فقط برای نوشتن یک برنامه ماشین حساب ساده میشد. در JavaFX نیز مشکل مانند بقیه پلتفرمها با استفاده از یک فایل متنی با فرمت fxml حل شده است.
اگر با استفاده از IDE NetBeans اقدام به ساخت یک پروژه JavaFX FXML بکنید، (مطابق تصویر زیر) پروژهای نمونه مبتنی بر JavaFX FXML خواهید داشت که یک Hello World ساده حساب میشود.
همانطور که میبینید متناظر با فایل FXMLDocument که تعریف کننده ظاهر برنامه و چیدمان اجزای آن است، یک فایل FXMLDocumentController داریم که کنترلکننده این ظاهر تعریف شده است. این ساختار بسیار نزدیکتر به مدل MVC است. طبیعتا برای اعمال تغییرات در ظاهر برنامه ابزارهایی وجود دارد که بتوان به صورت گرافیکی ظاهر برنامه را تعریف کرد. با استفاده از نرمافزار Gluon Scene Builder میتوانیم ظاهر برنامههای خود و تمام خصوصیات و افکتهای گرافیکی را با استفاده از این نرم افزار دستکاری و ویرایش کنیم:
شخصی سازی راحتتر:
داشتن یک نرم افزار با ظاهر شخصی میتواند بسیار دلربا و فریبنده باشد. در Swing شخصیسازی اجزای گرافیکی چندان ساده نیست و قالب های آماده هم چندان چشم نواز نبودند (Swing Look & Feels). اما در JavaFX می توان به سادگی با استفاده از JavaFX CSS، که مشابه CSS عادی اما با امکانات کمتر است، ظاهر برنامهها را شخصی کرد. به عنوان یک مثال واقعی میتوان از برنامهای مانند SkedPal که یک دستیار و برنامهریز هوشمند برای مدیران پرمشغله است نام برد. با دیدن ظاهر این برنامه اصلا نمیتوانید تشخیص دهید که این برنامه کاملا با جاوا نوشته شده یا با زبان دیگری:
امکانات بیشتر:
در Swing امکانات و اجزای بسیار کمی وجود داشتند که اکثرا هم ظاهر چندان مطلوبی نداشتند، اما در JavaFX امکانات پیشفرض بسیاری در اختیار دارید. مثلا در Swing برای کشیدن نمودار باید از کتابخانههای جانبی استفاده میکردید که چندان امکانات ظاهری مناسبی نداشتند و قابل رقابت با نمونههای پلتفرمهای دیگر نبودند. اما حال، انواع نمودارهای مختلف به صورت پیشفرض تعریف شدهاند که علاوه بر سادگی کار با آنها، زیبایی بصری و انیمیشنسازی نمودارها نیز ممکن شده است.
توسعه برنامه و شبیهسازیهای سه بعدی نیز در Swing فقط از طریق تعداد معدودی کتابخانه ممکن بود، اما در JavaFX علاوه بر API های سهبعدی برای رسم، نورپردازی، جابجایی در محیط سه بعدی و … میتوانید از کتابخانههایی که بر روی این API ها نوشته شدهاند نیز استفاده کنید که ظاهر بسیار چشم نوازتری دارند.
شاید اگر قرار باشد که چند فرمول و پدیده ریاضی را شبیهسازی کنیم بعد از متلب، همه نگاه ها به پایتون باشد. اما توسعه چنین شبیهسازیهایی با JavaFX چندان سخت نیست و دیگر پایتون تنها راه حل ممکن نیست:
میتوانید این شبیهسازیهای ریاضی را در این و این سایت مشاهده کنید که همه آنها با JavaFX نوشته شدهاند. در مطلبی که در سایت DZone نوشته شده است نحوه توسعه چنین شبیهسازیهایی توضیح داده شده است.
علاوه بر نمودارها و قابلیتهای توسعه اپلیکیشن های سه بعدی، API های متعددی برای کار با انیمیشنها و انیمهسازی برنامه ها وجود دارد که در نمونههای بالا نیز از این انمیشنها استفاده شده. می توانید مثالهای متعددی از این قابلیتها و امکانات را از طریق sample های موجود در NetBeans مشاهده کنید:
کامیونیتی بزرگتر و بهروزتر:
دوران Swing به سر رسیده و وقت آن شده که با جریان همراه شد و از کامیونیتی قویای که در حال گسترش JavaFX هستند استفاده کرد. شرکت Gluon امکاناتی برای تبدیل برنامههای JavaFX به اپلیکیشنهای Android و iOS را می دهد که میتوانید در بلاگ اوراکل در مورد آن بخوانید.
همچنین فعالیتهایی برای اجرای برنامههای JavaFX بر روی مرورگر بدون نیاز به نصب پلاگین در حال انجام است که احتمالا در کنفرانس JavaOne 2017 معرفی خواهد شد.
اما مهم ترینجنبه یک تکنولوژی وجود کامیونیتی خوب برای آن است. از طریق صفحه گیتهاب AwesomeJavaFX میتوانید لیست کاملی از چارچوبها، کتابخانهها، منابع یادگیری و دیگر موارد مورد نیاز را مشاهده کنید و از آنها برای توسعه اپلیکیشنهای خود استفاده کنید. مثلا یکی از مهمترین آنها کتابخانه JFoenix است که برای Material Design کردن ظاهر برنامهها کاربرد دارد.
اگر میخواهید کمی بیشتر با موارد پایهای JavaFX آشنا شوید بد نیست نگاهی به این فیلم های فارسی بیاندازید.
javafx فوقعلاده قوی اما متاسفانه آموزشای به زیان فارسیش کمه
سلام پس به نظر شما باید از سویینگ بگذرم من خودم تازه برنامه نویسی جاوا رو شروع کردم
سلام تجربه من با 8 javafx اینه که زمان استفاده از فونت های فارسی حروف رو کاملا بهم نمی چسبونه و فرم که شلوغ تر می شه gluon هنگ می کنه
سلام واقعا تو کار با زبان فارسی مشکل داره؟ اگر اینطور باشه خیلی بده
لطفا در مودر javafx بیشتر مطلب بذارید منابع فارسی در این مورد خیلی کمه
بله این اشکال در رندرینگ حروف عربی و فارسی وجود داره. اگر خیلی این موضوع اذیت کننده هست می تونید از کامپوننت های Swing در JavaFX استفاده کنید که البته کمی باعث شلوغی و قاطی شدن اسم ها بشه.
به نظرم درباره پیاده سازی MVC در مجموع Swing بهتره. در Java FX قسمت Controller با View چسبندگی بالایی دارند.
برنامه نویسی با JavaFX حقیقتا لذت بخشه، طراحی یکپارچه، مدیریت event ها به تر و تمیز ترین شکل ممکن (در مقایسه با swing)، سادگی کار با controller ها، امکان ساخت Custom Controller ها و CSS چیزهایی بودند که توجه من و جلب کردند.
کتاب Learn JavaFX 8 تالیف Kishori Sharan از انتشارات Apress خیلی روان نوشته شده. این سایت هم لینک های هفتگی به اخبار و آخرین بسته های نرم افزاری که می تونه مورد استفاده ی برنامه نویس های JavaFX قرار بگیره منتشر می کنه:
http://fxexperience.com
برنامه نویسی Desktop Application خیلی جذابه، کاش فرصت های شغلی بیشتری برای جاوا تو این حوزه وجود داشت و می شد به عنوان یک تخصص درآمد زا بهش نگاه کرد. امیدوارم توسعه ی JavaFX بتونه سهم جاوا رو تو این حوزه بیشتر کنه.
آقای ریماز ممنون از مقاله ی خوبتون.