راهنمای اضافه کردن Look And Feel های جاوا به سیستم
جاوا این امکان رو فراهم کرده که برنامه رو با کمترین تغییرات روی پلتفرم های مختلف اجرا کنیم به شکلی که تجربه ی کاربری مشابهی داشته باشن؛ یا حداقل تلاشش بر این بوده.
به هرعنوان وقتی صحبت از توسعه ی Cross-Platform نرم افزار مطرح میشه، یکی از موضوعاتی که باید بهش توجه بشه GUI هست، هر کدوم از این پلتفرم ها فریم وورکی برای ایجاد جلوه ی گرافیکی مختص به اون پلتفرم دارن.
مشکلی که خیلی (یا حداقل تعداد زیادی) از برنامه های نوشته شده با جاوا دارن این هست که ظاهر گرافیکی مناسبی ندارن و به نوعی به شکل زیبایی با سیستم هماهنگ نمیشن و ظاهری Native ندارن.
جاوا برای برنامه نویسانش که از فریم وورک Swing استفاده میکنن تعدادی Look And Feel پیشفرض مهیا کرده که ظاهر گرافیکی رو بر اساس اونها ایجاد کنن، و برای هر پلتفرم Look And Feelی طراحی شده که تا جایی که ممکنه با سیستم هماهنگ بشه.
اما حداقل در Ubuntu این هماهنگی به شکل مناسبی صورت نگرفته، یعنی Look And Feel پیشفرضی که برای سیستم های لینوکس تهیه شده (با نام gtk) ظاهری نامتعارف نسبت به سایر برنامه های دیگه ی سیستم داره
اما هر مشکلی راه حلی داره !
پروژه های مختلفی برای توسعه ی Look And Feel های زیبا و مناسب برای جاوا شکل گرفته، از دید یک برنامه نویس شما میتونید این LAF ها رو برای استایل کردن برنامه هاتون استفاده کنید.
اما علاوه بر اون، کاربر نهایی هم میتونه LAF ها رو به سیستمش اضافه کنه و اون رو بطور خاص به برنامه های جاوا اعمال کنه.
اول باید LAF ها رو به سیستم اضافه کنیم، برای مثال Tinylaf
هر LAF بصورت یک فایل Jar عرضه میشه که باید در محلی مشخص کپی بشه، در پست قبل اشاره شد که محل نصب JDK و JRE در سیستم کجاست، این فایل های Jar باید در مسیر lib/ext نسبت به پوشه ی JRE کپی بشه، یعنی به عنوان مثال در پوشه ی زیر:
/usr/lib/jvm/java-7-openjdk-i386/jre/lib/ext
بعد از اینکه فایل Jar در این مسیر قرار گرفت، توسط Java شناسایی میشه و قابل استفاده هست.
برای اعمال LAF مشخص به یک برنامه ی خاص (صرفنظر از اینکه خود برنامه بصورت پیشفرض از چه LAFی استفاده میکنه)، برنامه رو توسط دستور زیر در ترمینال اجرا کنید (فرض کنیم برنامه ی موردنظر نامش app.jar هست و در home قرار داره):
java -Dswing.defaultlaf=de.muntjak.tinylookandfeel.TinyLookAndFeel -jar ~/app.jar
همونطور که می بینید از نام پکیج مربوط به LAF استفاده شده و نه نام فایل Jar، برای اعمال LAF ها باید از نام پکیج و کلاسی که مربوط به LAF هست اطلاع داشته باشید، اگر در توضیحات LAF موردنظر ذکر نشده باشه فایل Jar رو با یکی از برنامه های Archive Manager باز کنید تا نام پکیج و کلاس مربوطه رو پیدا کنید (برای مثال Tinylaf رو دانلود کنید و بازش کنید و با نام پکیجی که در دستور بالا اشاره شد مقایسه کنید، متوجه خواهید شد)
در عین حال، بعضی از برنامه ها در تنظیماتشون امکان انتخاب Look And Feel دلخواه که روی سیستم کاربر موجود هست رو فراهم میکنن، اما کپی کردن فایل Jar به تنهایی باعث نمیشه سایر برنامه از وجودش مطلع بشن.
برای معرفی اون به این دسته از برنامه ها، فایلی بنام swing.properties - در صورتی که موجود نبود - در مسیر زیر ایجاد کنید (java-7-openjdk-i386 رو با نام پوشه ی جاوایی که روی سیستمتون نصب هست جایگزین کنید):
/usr/lib/jvm/java-7-openjdk-i386/jre/lib/
محتوای این فایل در سیستم من بعنوان مثال این هست:
# Defalt Look And Feel swing.defaultlaf=de.muntjak.tinylookandfeel.TinyLookAndFeel # installed look and feels - system defaults swing.installedlafs=metal,nimbus,motif,gtk,weblaf,joxy,tinylaf,pgs,aluoxide,napkin,bluelight,classy,simple2d swing.installedlaf.metal.name=Metal swing.installedlaf.metal.class=javax.swing.plaf.metal.MetalLookAndFeel swing.installedlaf.nimbus.name=Nimbus swing.installedlaf.nimbus.class=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel swing.installedlaf.motif.name=CDE/Motif swing.installedlaf.motif.class=com.sun.java.swing.plaf.motif.MotifLookAndFeel swing.installedlaf.gtk.name=GTK+ swing.installedlaf.gtk.class=com.sun.java.swing.plaf.gtk.GTKLookAndFeel # installed look and feels - additional LAFs swing.installedlaf.weblaf.name=WebLookAndFeel swing.installedlaf.weblaf.class=com.alee.laf.WebLookAndFeel swing.installedlaf.joxy.name=Joxy swing.installedlaf.joxy.class=joxy.JoxyLookAndFeel swing.installedlaf.tinylaf.name=TinyLookAndFeel swing.installedlaf.tinylaf.class=de.muntjak.tinylookandfeel.TinyLookAndFeel swing.installedlaf.pgs.name=PGS swing.installedlaf.pgs.class=com.pagosoft.plaf.PgsLookAndFeel swing.installedlaf.aluoxide.name=AluOxide swing.installedlaf.aluoxide.class=de.javasoft.plaf.synthetica.SyntheticaAluOxideLookAndFeel swing.installedlaf.bluelight.name=BlueLight swing.installedlaf.bluelight.class=de.javasoft.plaf.synthetica.SyntheticaBlueLightLookAndFeel swing.installedlaf.classy.name=Classy swing.installedlaf.classy.class=de.javasoft.plaf.synthetica.SyntheticaClassyLookAndFeel swing.installedlaf.simple2d.name=Simple2D swing.installedlaf.simple2d.class=de.javasoft.plaf.synthetica.SyntheticaSimple2DLookAndFeel swing.installedlaf.napkin.name=Napkin swing.installedlaf.napkin.class=napkin.NapkinLookAndFeel
توضیحات دستورات موجود در فایل:
- swing.defaultlaf: مشخص میکنه که کدوم LAF بعنوان LAF پیشفرض سیستم انتخاب بشه، برنامه هایی که از LAF پیشفرض استفاده میکنن با این LAF جدید نمایش داده میشن.
- swing.installedlafs: لیستی از LAF های موجود رو معرفی میکنه، هر LAF ی که در این لیست وارد کرده باشید در معرض دید سایر برنامه های جاوا برای انتخاب هست.
swing.installedlafs=metal,nimbus,motif,gtk,weblaf,joxy,tinylaf,pgs,aluoxide,napkin,bluelight,classy,simple2d
در این خط لیستی از مشخصه ها ایجاد شده که در خط های بعد به هر کدوم از این مشخصه ها یک نام، و نام کامل پکیج و کلاس نسبت داده میشه که برای اعمال این LAF ها ضروری هست. بعنوان مثال:
swing.installedlaf.tinylaf.name=TinyLookAndFeel swing.installedlaf.tinylaf.class=de.muntjak.tinylookandfeel.TinyLookAndFeel
به این شکل تمام LAF های موجود رو به این فایل اضافه کنید.
بخاطر داشته باشید که اگر لیستی به این فایل اضافه کردید، فقط LAFهای معرفی شده در این فایل قابل شناسایی خواهند بود (منظور در برنامه هایی هست که از سیستم تقاضا میکنن لیستی از LAF های نصب شده رو در اختیارشون قرار بده تا کاربر یکی از اونها رو انتخاب کنه)
بخاطر همین، LAF های پیشفرضی که در Java قرار داره هم به لیست اضافه شده:
swing.installedlaf.metal.name=Metal swing.installedlaf.metal.class=javax.swing.plaf.metal.MetalLookAndFeel swing.installedlaf.nimbus.name=Nimbus swing.installedlaf.nimbus.class=com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel swing.installedlaf.motif.name=CDE/Motif swing.installedlaf.motif.class=com.sun.java.swing.plaf.motif.MotifLookAndFeel swing.installedlaf.gtk.name=GTK+ swing.installedlaf.gtk.class=com.sun.java.swing.plaf.gtk.GTKLookAndFeel
تصویر زیر رو با تصویر اول مقایسه کنید: