مجموعة أدوات نافذة التجريد

نموذج ويندوز مع بعض أمثلة AWT

مجموعة أدوات النوافذ المجردة ( AWT ) هي مجموعة أدوات جافا الأصلية للنوافذ والرسومات وعناصر واجهة المستخدم ، والتي تعتمد على النظام الأساسي ، وقد سبقت Swing . تُعدّ AWT جزءًا من فئات جافا الأساسية (JFC) - وهي واجهة برمجة التطبيقات القياسية لتوفير واجهة مستخدم رسومية (GUI) لبرنامج جافا. [ 1 ] كما تُستخدم AWT أيضًا كمجموعة أدوات واجهة المستخدم الرسومية لعدد من ملفات تعريف Java ME . على سبيل المثال، تتطلب ملفات تعريف تكوين الأجهزة المتصلة بيئات تشغيل جافا على الهواتف المحمولة لدعم مجموعة أدوات النوافذ المجردة.

تاريخ

عندما أصدرت شركة صن مايكروسيستمز لغة جافا لأول مرة عام ١٩٩٥، وفرت أدوات AWT مستوىً بسيطًا من التجريد فوق واجهة المستخدم الأصلية. على سبيل المثال، كان إنشاء مربع اختيار باستخدام AWT يستدعي مباشرةً الدالة الفرعية الأصلية التي أنشأت مربع الاختيار. مع ذلك، يختلف شكل مربع الاختيار في نظام ويندوز عن شكله في نظام macOS أو في أنظمة يونكس المختلفة . يفضل بعض مطوري التطبيقات هذا النموذج لأنه يوفر دقة عالية في محاكاة أدوات إدارة النوافذ الأصلية، بالإضافة إلى التكامل السلس مع التطبيقات الأصلية. بعبارة أخرى، يبدو برنامج واجهة المستخدم الرسومية المكتوب باستخدام AWT كتطبيق أصلي لنظام مايكروسوفت ويندوز عند تشغيله على ويندوز، بينما يبدو البرنامج نفسه كتطبيق أصلي لنظام أبل ماكنتوش عند تشغيله على ماك، وهكذا. مع ذلك، لا يفضل بعض مطوري التطبيقات هذا النموذج لأنهم يفضلون أن تبدو تطبيقاتهم متطابقة تمامًا على جميع المنصات.

في J2SE 1.2 ، حلت مجموعة أدوات Swing محل أدوات AWT إلى حد كبير. فبالإضافة إلى توفير مجموعة أغنى من أدوات واجهة المستخدم، ترسم Swing أدواتها الخاصة (باستخدام Java 2D لاستدعاء إجراءات فرعية منخفضة المستوى في نظام الرسومات المحلي) بدلاً من الاعتماد على وحدة واجهة المستخدم عالية المستوى لنظام التشغيل. كما توفر Swing خيار استخدام إما مظهر النظام الأساسي الأصلي أو مظهرًا موحدًا متعدد المنصات (مظهر Java) يظهر بنفس الشكل على جميع أنظمة النوافذ.

بنيان

توفر AWT مستويين من واجهات برمجة التطبيقات (APIs) :

كما توفر AWT بعض الوظائف ذات المستوى الأعلى للتطبيقات، مثل:

لا تُعتبر كلٌ من AWT وSwing آمنةً بطبيعتها للاستخدام المتزامن . لذا، يجب تنفيذ التعليمات البرمجية التي تُحدِّث واجهة المستخدم الرسومية أو تُعالج الأحداث على خيط معالجة الأحداث . قد يؤدي عدم القيام بذلك إلى حالة جمود أو تضارب في البيانات. ولمعالجة هذه المشكلة، تسمح فئة مساعدة تُسمى SwingWorker للتطبيقات بتنفيذ المهام التي تستغرق وقتًا طويلاً بعد أحداث تفاعل المستخدم في خيط معالجة الأحداث.

مزج مكونات AWT و Swing

عند وجود نسخة Swing من مكون AWT، ستبدأ بـ J- ويجب استخدامها حصريًا، بدلاً من نسخة AWT. على سبيل المثال، في Swing، استخدم JButton فقط، ولا تستخدم فئة Button أبدًا. كما ذُكر سابقًا، لا تزال فئات AWT الأساسية، مثل Color وFont، تُستخدم كما هي في Swing.

عند الرسم في Swing، استخدم JPanel وقم بتجاوز paintComponent(Graphics g) بدلاً من استخدام طرق AWT paint().

قبل تحديث Java 6 رقم 12 ، كان دمج مكونات Swing مع عناصر واجهة المستخدم الأساسية في AWT يؤدي غالبًا إلى آثار جانبية غير مرغوب فيها، حيث تظهر عناصر واجهة المستخدم AWT فوق عناصر واجهة المستخدم Swing بغض النظر عن ترتيبها المحدد ( z-order) . يعود سبب هذه المشكلة إلى اختلاف بنية عرض مجموعتي أدوات واجهة المستخدم اختلافًا كبيرًا، على الرغم من أن Swing تستخدم حاويات علوية ثقيلة الوزن من AWT. [ 2 ]

ابتداءً من تحديث Java 6 رقم 12 ، أصبح من الممكن دمج عناصر واجهة المستخدم Swing و AWT دون حدوث مشاكل في ترتيب العناصر (z-order). [ 3 ]

مثال

package org.wikipedia.examples ;استيراد java.awt.Frame ؛ استيراد java.awt.Label ؛ استيراد java.awt.event.WindowAdapter ؛ استيراد java.awt.event.WindowEvent ؛public class MyApp {public static void main ( String [] args ) { Frame frame = new Frame ( "Application" ); frame . add ( new Label ( "Hello!" )); frame . setSize ( 500 , 500 ); frame . setLocationRelativeTo ( null ); // توسيط النافذة frame . addWindowListener ( new WindowAdapter () { @Override public void windowClosing ( WindowEvent e ) { frame . dispose (); // تحرير موارد الشاشة الأصلية } }); frame . setVisible ( true ); } }

تطبيق

بما أن AWT عبارة عن جسر إلى واجهة المستخدم الأصلية الأساسية، فإن تنفيذه على نظام تشغيل جديد قد ينطوي على الكثير من العمل، خاصة إذا كان يتضمن أيًا من عناصر واجهة المستخدم الرسومية AWT، لأن كل منها يتطلب تطوير نظائرها الأصلية من الصفر.

تم إنشاء مشروع جديد، Caciocavallo، يوفر واجهة برمجة تطبيقات Java مبنية على OpenJDK لتسهيل تطبيق AWT على الأنظمة الجديدة. [ 4 ] [ 5 ] وقد نجح المشروع في تطبيق عناصر واجهة المستخدم الرسومية AWT باستخدام Java2D . [ 6 ] ومنذ ذلك الحين، تم دمج جميع تعديلات JDK الأساسية اللازمة في OpenJDK 7 ، [ 7 ] مما يعني أنه يمكن الآن استخدام Java على حزمة رسومات أخرى غير تلك التي يوفرها JDK الرسمي ( نظام X Window ، أو OpenGL ، أو DirectX )، وذلك عن طريق تضمين مكتبة خارجية وتعيين بعض خصائص النظام. ويجري حاليًا تطوير واجهة خلفية DirectFB لـ Caciocavallo [ 8 ] ، بالإضافة إلى واجهة خلفية HTML5 ؛ والهدف هو نشر تطبيقات Swing الحالية - التي لا تدعم Java - كتطبيقات ويب عادية تعمل على خادم ويب. [ 8 ] [ 9 ]

انظر أيضاً

مراجع

  1. تستند هذه المقالة إلى مواد مأخوذة من Abstract+Window+Toolkit في قاموس الحوسبة المجاني على الإنترنت قبل 1 نوفمبر 2008 وتم دمجها بموجب شروط "إعادة الترخيص" الخاصة بـ GFDL ، الإصدار 1.3 أو أحدث.
  2. فاولر، إيمي (1994). "خلط المكونات الثقيلة والخفيفة" . صن مايكروسيستمز . مؤرشف من الأصل في 23 ديسمبر 2011. تم الاسترجاع في 17 ديسمبر 2008 .
  3. «تم إصلاح الخلل/طلب الميزة في الإصدار الحالي من JDK 6u12» . صن مايكروسيستمز . ١٢ ديسمبر ٢٠٠٨. مؤرشف من الأصل في ١٧ ديسمبر ٢٠٠٨. تم الاطلاع عليه في ١٧ ديسمبر ٢٠٠٨ .
  4. توري، ماريو (2 مارس 2008). "الاقتراح النهائي: واجهات مستخدم رسومية محمولة" . مؤرشف من الأصل في 19 مارس 2012. تم الاطلاع عليه في 7 سبتمبر 2008 .
  5. كينكي، رومان (18 ديسمبر 2008). "نظرة عامة على عمارة كاشيوكافالو" . تم الاطلاع عليه في 7 سبتمبر 2008 .
  6. كينكي، رومان (3 سبتمبر 2008). "أقران كاسيو سوينغ AWT" . مؤرشف من الأصل في 13 مارس 2012. تم الاسترجاع في 7 سبتمبر 2008 .
  7. "ما مقدار التغييرات التي تم رفعها إلى المصدر الرئيسي؟" . openjdk.java.net. 20 سبتمبر 2009. مؤرشف من الأصل في 19 مارس 2012. تم الاطلاع عليه في 7 مارس 2010. لست بحاجة إلى أي من تلك التصحيحات بعد الآن، فمع آخر تحديث لـ FontManager، أصبح كل شيء الآن جزءًا من المصدر الرئيسي، لذا استخدم مستودع Cacio، فهو مكتفٍ ذاتيًا تمامًا.
  8. 1 2 كينكي، رومان (28 يوليو 2011). "JDK7 وروعة Cacio" . تم الاسترجاع في 8 أغسطس 2011 .
  9. إيسيرر، كليمنس. "واجهة HTML5/Canvas الخلفية لـ Caciocavallo (GNU-Classpath)" . مؤرشف من الأصل في 21 مارس 2012. تم الاطلاع عليه في 8 أغسطس 2011 .