لطالما تسائل كثير من مبرمجي الجافا عن سبب وجود مكتبتين خاصه برسم المكونات GUI Components ، ومن هي الأفضل في التطبيقات؟
الجواب وكغيره في بعض الأسئلة هو عن طريق الرجوع لأصل وسبب نشأه تلك المكتبات،، فمنذ صدور نسخه جافا الأولى Java 1.0 وهي تحتوي على مكتبة Abstract Window Toolkit (الAWT) وهي كانت الأساس في تطوير الواجهات الرسومية GUI، وتقوم بعمليات أخرى رسم نافذه البرنامجالرئيسية Window ، استقبال أحداث الماوس والكيبورد Event Handling، وتقوم بذلك عن طريق الاعتماد على نظام التشغيل الذي يعمل عليه البرنامج Windowing System ، لذلك ال AWT هي Platform Specific وبرنامجك سوف يأخذ شكل النظام الذي يعمل عليه، مثلاً برنامجك عمل في Solaris سوف يأخذ شكل بقية البرامج Look & Feel، وبالفعل كانت البدايه كما هو الشعار Write Once, Run Any Where.
لكن بعد ذلك، حدثت بعض المشاكل في ال AWT، حيث هناك منصات لا تحتوي دعم لكل ال Components كما في غيرها من المنصات (مثلاً X11/Motif) وسوف تجد أن برنامجك يتصرف تصرفاً غريباً احياناً ووجد بعض من المشاكل البرمجية ايضاً بها Bugs. حتى أن برامج ال AWT لا تأخذ شكل النظام كما بقية البرامج ال Native الأخرى. لذلك اشتهر الشعار Write Once, Debug Everywhere.
شركة Netscape كانت لديها الكلمة، حيث طورت مكتبة جديدة لل GUI سمتها ذلك الوقت Internet Foundation Classes (الIFC) والتي أعتمدت على منهجية مختلفة في التعامل مع المكونات، حيث بدلاً من الاعتماد على نظام التشغيل فيها قامت برسم كل تلك المكونات سواء كانت Buttons, Menu الخ ، واعتمدت على نظام التشغيل في رسم النافذه الأولى Top Window والتعامل مع الأحداث. وبالتالي اصبحت المكتبة تعمل على جميع المنصات بنفس الشكل.
شركة Sun عجبها الأمر وعملت مع نت سكيب لأكمالها حتى خرجت لنا المكتبة Swing وتم اضافتها كاضافه للغه الجافا Extension في النسخه 1.1 وادخلت ضمن اللغه في الاصدار Java 1.2 (لذلك عندما ترى الباكج javax.swing فال x هي ترمز للاضافات Extensions في اللغه ومازالت تستخدم حتى هذا اليوم). المكتبة Swing ادخلت مع مجموعه من المكتبات تحت مسمى Java Foundation Classes (وهي تضم Swing و مكتبات ال 2D، وال Drag and Drop API وغيرها).
أحتوت Swing على مكونات أكثر، وبسبب أنها ترسم على النافذه Painting باستخدام Java 2D API فانها تعمل على جميع المنصات بنفس الشكل Look and Feel، وان لم ترغب بذلك ورغب بشكل يشبه ال Native Feel للنظام الذي تعمل فيه فهذا أمر سهل، حيث وفرت Sun دوال لتغيير ال Look and Feel وجعل مثلاً برنامجك الذي يعمل في ويندوز يأخذ ال Windows Look and Feel أو مثلاً GTK look and feel. ليس هذا فقط بل هناك بعضاً من الأشكال لا تتعلق بأي نظام Platform Independent مثل الشكل الافتراضي لبرامج الجافا Metal (يطلق عليه احياناً Java L&F).
خلاصه المكتبة Swing بنيت فوق ال AWT ، وحالياً Swing تستخدم للمكونات نظراً لوفرتها وعدم اعتمادها على النظام Lightweight Library، لكن ال AWT مازالت هي التي تقوم بالأمور المتعلقة بالنظام Windowing Toolkit ورسم النافذه الاولى واستقبال الأحداث وهي أمور بلا شك ضرورية في اي تطبيق.
اذاً اجابه على السؤال السابق، ماذا أستخدم: AWT أم Swing ؟؟؟ فالجواب: الاثنين معاً.
أشكرك على مقالك لكن أتوقع السؤال الذي يجب طرحه حاليا هو هل أستخدم Swing أو JavaFX ؟
والجواب هو أن JavaFX حاليا تستبدل Swing وأوراكل تشجع المطورين على استخدامها بدلا من Swing (على الرغم من أنه بالإمكان الدمج بينهما)
http://www.oracle.com/technetwork/java/javafx/overview/faq-1446554.html#6
بالتأكيد JavaFX نضجت كثيراً الفترة الماضية ولكن قد تحتاج لسنوات حتى ينتقل المطورين بشكل كامل، خصوصاً أن هناك الكثير من ال Production Code مكتوب بها..
لم يسبق ان تعاملت معها في المشاريع ، وان شاء الله ستكون لها نصيب 🙂
شكراً لمشاركتك الرابط
أنا أفضل SWT …. فهي Native L&F على أي منصه تدعمها.
SWT هي حبيبه شباب الأكلبس ، ايضاً دعمها جيد ولها سوقها..
بنفس الأمر هناك Platform من NetBeans واعتقد أنها تتفوق على الأكلبس بها،
انظر للبرامج التي صممت بها لتعرف مدى قدرتها على عمل التطبيقات الكبيرة مثل تطبيقات المحاكاة والادارة والخ:
https://netbeans.org/features/platform/showcase.html
مشكلتها الوحيدة في ال Learning Curve والا فامكانياتها رائعه
ما الفرق بين java fx, awt, swing