السلام عليكم
اخواني عندي سؤال بسيط ان شاء الله .
كيف يمكنني تصممي جدول تفاغلي أو Complex table
أي جدول يحتوي على JComboBox , JButtons , JTextFields , ... etc
هل ممكن اعطاء مثال بسيط
السلام عليكم
اخواني عندي سؤال بسيط ان شاء الله .
كيف يمكنني تصممي جدول تفاغلي أو Complex table
أي جدول يحتوي على JComboBox , JButtons , JTextFields , ... etc
هل ممكن اعطاء مثال بسيط
هناك أمران يجب معالجتهما
الأمر الأول، هو أنه عندما تضيف مكونا ما، فإنه يتم النداء على الدالة getTableCellRendererComponent الموجودة في TableCellRenderer، هذه الدالة تعيد كائنا يرث من Component، وهذا الكائن يكون عادة من صنف JLabel، حيث يتم النداء على toString() الخاصة بالكائن الذي أضفته إلى الجدول وكتابة الString الناتج في الJLabel، ثم تقوم getTableCellRendererComponent بإعادة الJLabel الناتج إلى الجدول ليتم رسمه
إذن إذا قمت بإضافة كائن JButton فإن ما سيتم رسمه ليس الزر نفسه، ولكن فقط الString الناتج عن النداء على toString. لذلك يجب كتابة فئة جديدة ترث من TableCellRenderer ونقوم بإعادة كتابة الدالة getTableCellRendererComponent
الأمر الثاني ، كل الevents يتم التعامل معها من طرف الJTable، يعني لو ضغطت على JButton داخل JTable، فالevent لن يذهب إلى الزر بل إلى الجدول، لذلك يجب عند كل event إعادة إرساله إلى الزر أو أي مكون آخر
هذا مثال
import javax.swing.*;
تعبت من الكتابة ، الشرح بعد الفاصل :P
تم تعديل هذه المشاركة بواسطة herch في 26 سبتمبر 2009 في 21:52
يعني كيف تريد الأزرار في الجدول
كان عندي مشروع إشتغلت عليه بالجافا وكنت أريد أريد الزر في الجدول ولم أجد أي طريقة أن أضع زر في خلية من الجدول بل كل المحاولات التي حاولتها كانت تعطيني إما زر في عمود بأكمله او في صف بأكلمه يمكنك أن تأخذ هذا المثال من موقع الشركة
http://java.sun.com/docs/books/tutorial/ui...ents/table.html
تم تعديل هذه المشاركة بواسطة bilal2005 في 26 سبتمبر 2009 في 22:02
الآن مع الشرح المختصر :D
أولا بالنسبة للكلاس المسؤولة عن رسم عناصر الجدول، داخل الدالة getTableCellRendererComponent نتحقق من أن الكائن الذي نريد إضافته هو من فئة Component أو من فئة ترث منه، إذا كان الأمر كذلك فإننا نعيده كما هو، إذا لم يكن كذلك ننادي على الدالة toString ونكتب ناتجها داخل JLabel، ثم نعيد هذا الJlabel
بالنسبة للevents، فيجب أن نمررها من الجدول إلى المكونات التي داخل الجدول، لذلك سنستخدم dispatchEvent التي تمرره من مكون إلى آخر.
داخل الدالة processEvent، أولا نسترجع رقم السطر ورقم العمود من خلال rowAtPoint و columnAtPoint، لأننا من خلال الMouseEvent نتوفر فقط على الإحداثيات التي تم النقر فيها بالفأرة
ثم نتحقق إذا كان رقما السطر والعمود يوجدان داخل الجدول، ثم نقوم بتمرير الevent
شكرا يا عصام وبلال على المشاركة ,,,
أريد أن أسال يا عصام ,, لقد لاحظت في المثال أن الزر Button , لا يمتلك خاصيته التفاعلية , هي الضغط , فضلا عن ذلك أنك إذا قمت بالضغط Double click عليه فإنه يظهر على شكل String , فما الحل لكلا الحالتين.
كل عمود في الجدول يكون مرتبط بTableCellEditor وهو الذي يقوم بإظهار الtext field فوق الزر عند double click
حاولت حل الأمر بكتابة TableCellEditor يقوم فقط برسم المكون نفسه، أي الزر، بدل الtext field، لكن لا أعلم إذا كان هذا أفضل حل
TableColumnModel colModel = table.getColumnModel();
بالنسبة للمشكل الأول حاولت معه لكن لا فائدة :angry:
يمكنكم الاطلاع على هذا الموقع
http://publicobject.com/glazedlists/
والرجاء مشاهدة هذا المقطع ايضا
http://publicobject.com/glazedlists/media/...nes_of_code.mov
للعلم أنا لم اعمل عليه بعد لكن افكر في استبدال الTable القديم به
شكرا لكم
السلام عليكــم ورحمـة الله وبركاتــه
هذا الكود يعطي نتيجة احسن من الكود السابق
فهل من احد يستطيع ان يشرحه تفصيلياً
import java.awt.*;