الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

استفسار فى كيفيه جعل ال JDaliog يظهر عند الضغط على زار معين ؟؟

بدأه Mahmoud Kelany في 10 مايو 2010 · 21 رد · 1,140 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمه الله وبركاته

عندى استفسار يا ريت تساعدونى فيه

انا حاولت كتير على النت ولكن لم استطع ان اكون ماهرا فى كلمات البحث

انا دلوقتى عامل JDailog وعاوز لم اكون فى JDaliog تانى وادوس مثلا على الزرار add

يظهر لينا الــJDailog الاول

يعنى مثلا خلينا فالمثال اللى انا شغال فيه دلوقتى

يعنى انا ادوس على زرار Add فالصوره دى

90182082.jpg

يظهر ليا الــ Dialog اللى فالصوره دى

16604948.jpg

الـ action بتاعت الزراير كلها واقفه على المشكله دى

افيدونى افادكم الله

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#2

المشكله اتحلت والحمدلله

كان عندى غلطه فالـ constractor

هاقول الحل بتاعى علشان يمكن يكون فيه حاجه احسن

 DrugDialog dd = new DrugDialog(null, rootPaneCheckingEnabled);
        dd.setVisible(true);

اتمنى لو فيه حاجه افضل من كدا

تفيدونا

ومنكم نستفيد

وشكراا

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#3

معلش هاتقل عليكوا

مش عارف مش بعرف حل السوال الا لم بعرض السوال الاول ليه مع انى بحاول كتير قبل ما اعرض الحاجه

كنت عاوز لم اضغط على زرار Save

ياخد البينات اللى فالـ Dialog بتاع الصوره التانيه

ويعرضها فالـ Dialog التانى بتاع الصوره الاولى

ياخد البينات ويعرضها فالجدول يعنى

ازاى لانى حاولت معاها كتير

وكمان علشان اول مره استخدم الـ Dialog & Tables

وشكرا

واسف على الازعاج

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#4

كل Dialog عبارة عن كائن تستطيع ببساطة أن تضع فيه أي دالة get أو set

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#5

طب انا عملت كدا يا بشمهندس

فى الDialog بتاع الـ History Table

بس طبعا لو دوست Cancel or Save هيضيف البيانات فالجدول لانى مش عارف اتعامل مع امر الSave من الـDialog الاخر

  addDrug = new DrugDialog(null, rootPaneCheckingEnabled);
        addDrug.setVisible(true);

        int row;
        row = radiologyHistoryTable.getSelectedRow();

        radiologyHistoryTable.setValueAt(addDrug.getDrugNameTextField(), row, 0);
        radiologyHistoryTable.setValueAt(addDrug.getDoseTextField(), row, 1);
        radiologyHistoryTable.setValueAt(addDrug.getModeOfAdministrationComboBox(), row, 2);
        radiologyHistoryTable.setValueAt(addDrug.getStartDateTextField(), row, 3);
        radiologyHistoryTable.setValueAt(addDrug.getEndDateTextField(), row, 4);

بس انا لم اجى ادوس اضيف بيانات لازم اعلم على الصف الاول وبعدين ادوس على Add

ولو دوست والصف فيه بيانات وبعدين بدل ما اعمل Save عملت Cancel

بيروح ماسح كل البيانات ماعدا الcombo box بيحط الـ item1

انا عاوز لم ادوس cancel مش يغير حاجه

وعاوز لم اعمل add يضيف بعد اخر صف موجود

ولم جيت اعمل امر الـ edit مش اتنفذ معايا

ودا الكود بتاعه

   addDrug = new DrugDialog(null, rootPaneCheckingEnabled);
        addDrug.setVisible(true);
        int row;
        row = radiologyHistoryTable.getSelectedRow();
        addDrug.setDrugNameTextField((String) radiologyHistoryTable.getValueAt(row, 0));
        addDrug.setDoseTextField((String) radiologyHistoryTable.getValueAt(row, 1));
        addDrug.setModeOfAdministrationComboBox((String) radiologyHistoryTable.getValueAt(row, 2));
        addDrug.setStartDateTextField((String) radiologyHistoryTable.getValueAt(row, 3));
        addDrug.setEndDateTextField((String) radiologyHistoryTable.getValueAt(row, 4));

اسف جدا بس اول مره اتعامل مع الجداول وكمان GUI بوجه عام

اتمنى حد يفيدنى

ولو مش مفهوم ممكن ارفع الكود

سلام عليكم

تم تعديل هذه المشاركة بواسطة Eng.Hamzawy في 10 مايو 2010 في 18:18

Software Developer
Mahmoudkelany.com


 

#6

ولو أني لم أستطع فهم الموضوع بشكل جيد بسبب اللهجة المصرية

لكني سأحاول

الموضوع كالتالي تريد عندما يضغط على الزر حفظ يتم تغيير البيانات الموجود في الجدول

طيب أنت تعمل بشكل صحيح بالنسبة للجدول

المشكلة لديك هي أنك تريد بعد أن تضغظ حفظ أن تتم عملية النقل إلى الجدول

إذن يجب أن يكون لدى الكائن EditDialog مؤشر على الكائن TableDialog

حتى يستطيعي إعلامه عندما تتم هذه العملية

لذا أعطي EditDialog مؤشر على TableDialog في صانع الكائنات

أو في دالة set وعندما تنتهي من عملية التعديل على الجدول دع الكائن EditDialog يقوم بنداء دالة من TableDialog

والتي تقوم بالشيفرة التي ذكرتها أنت

        radiologyHistoryTable.setValueAt(addDrug.getDrugNameTextField(), row, 0);
        radiologyHistoryTable.setValueAt(addDrug.getDoseTextField(), row, 1);
        radiologyHistoryTable.setValueAt(addDrug.getModeOfAdministrationComboBox(), row, 2);
        radiologyHistoryTable.setValueAt(addDrug.getStartDateTextField(), row, 3);
        radiologyHistoryTable.setValueAt(addDrug.getEndDateTextField(), row, 4);

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#7

فعلا زى ما حضرتك فهمت كدا

بس انا مش فاهم الرد بتاع حضرتك دا

ازاى اعمل الربط بين الاتنين دا

اقتباس
المشكلة لديك هي أنك تريد بعد أن تضغظ حفظ أن تتم عملية النقل إلى الجدول

إذن يجب أن يكون لدى الكائن EditDialog مؤشر على الكائن TableDialog

حتى يستطيعي إعلامه عندما تتم هذه العملية

لذا أعطي EditDialog مؤشر على TableDialog في صانع الكائنات

أو في دالة set وعندما تنتهي من عملية التعديل على الجدول دع الكائن EditDialog يقوم بنداء دالة من TableDialog

لو امكن مثال توضيحى

وان شاء الله المره القادمه هاحاول اوصل السوال بطريقه كويسه او باللغه الانجليزيه

ومتشكر ليك يا بشمهندس

جزاك الله كل خير

منتظر رد حضرتك

Software Developer
Mahmoudkelany.com


 

#8

دعني أجمل الموضوع في خطوات

1- إنشاء كائن من الفئة EditDialog والذي سيكون على النحو التالي

EditDialog edit=new EditDialog(param1,param2,param3,this);

حيث this ستشير إلى كائن من النوع TableDialog

2- الآن سنخزن مؤشر على الكائن TableDialog في EditDialog

public EditDialog(Type1 param1,Type2 param2,Type3 param3,TableDialog dialog){
this.dialog=dialog;
// another code
}

الآن يفترض أن لدنيا مستمع Listener على الزر حفظ البيانات save

والذي سيكون على النحو التالي

public void actionPerformed(ActionEvent event){
dialog.doSave();
}

كما تلاحظ المستمع عندما يحصل حدث يقوم بحفظ البيانات عن طريق مناداة دالة اسمها doSave

فعلياً هذه الدالة ستقوم باستجلاب البيانات من الكائن EditDialog

عن طريق الأسطر التي كتبتها أنت

radiologyHistoryTable.setValueAt(addDrug.getDrugNameTextField(), row, 0);
        radiologyHistoryTable.setValueAt(addDrug.getDoseTextField(), row, 1);
        radiologyHistoryTable.setValueAt(addDrug.getModeOfAdministrationComboBox(), row, 2);
        radiologyHistoryTable.setValueAt(addDrug.getStartDateTextField(), row, 3);
        radiologyHistoryTable.setValueAt(addDrug.getEndDateTextField(), row, 4);

أتمنى أن تكون وضحت

وعندما قلت أني لم أفهم لأنك كتبت باللهجة المصرية

فأنا قصدت أن تكتب باللغة الفصحى لأنها طريقة التخاطب المثلى ما بين العرب

بالعكس لو كتبت بالإنجليزية فلن تجد من يساعدة مطلقاً

(طبعاً أعني هنا في المنتدى)

تحياتي

1
حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

السلام عليكم

يا بشمهندس علاء

ان حاولت كتير جدا فى تطبيق اللى حضرتك عرضته

ولكن لم استطيع تطبيق ذلك

لعدم فهمى الجيد لما تقصده

لو تكرمت مثال بسيط

كى افهم واتعلم منه

وجزاكم الله خيرا

Software Developer
Mahmoudkelany.com


 

#10

ما رأيك لو تضع الشيفرة الخاصة بك وأقوم بتعديلها لك بما يتوافق مع المطلوب بالضبط

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#11

حاضر يا بشمهندس

الـكود بالمرفقات

واتمنى انى مش اكون متقل عليكوا

جافاوى جديد وعاوز اكون كويس جدا فيها بس لسه بدرى

ومنتظر رد حضرتك

ان شاء الله

سلام عليكم

DrugsDialog.rar

Software Developer
Mahmoudkelany.com


 

#12

قمت بالتعديلات التي ذكرت لك

راجعها وأخبرني لو احتجت أي توضيح

تحياتي

dialog.rar

تم تعديل هذه المشاركة بواسطة علاء الصالحي في 13 مايو 2010 في 06:29

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#13

جزاكم الله كل خير يا بشمهندس

بس فيه سوال محيرنى

ليه لم اجى اعمل add لازم اختار صف معين

مفيش طريقه اعرف بيها عدد الصفوف اللى موجود فيها بيانات

واخلى الحدث بتاع زرار Add يضيف البيانات بعد اخر صف موجود

وانا فى امر remove بستخدم الكود التالى

row = radiologyHistoryTable.getSelectedRow();
        ((DefaultTableModel) radiologyHistoryTable.getModel()).removeRow(row);

بعد ما بينفذ الكود بيمسح لى صف كام ولو فضلت امسح هيمسح الجدول كله

انا عاوزه يمسح البيانات اللى موجوده فالصف وبعدين يعمل ازاحه للبيانات علشان مش يقبى فيه صف فارغ

او يمسح الصف خالص ويضيف صف تانى تحت فالاخر

وانا الجدول بتاعى 8 صفوف لو خلصت الصفوف مش هاعرف اعمل صفوف جديده

عاوز لم مش يكون فيه صفوف موجوده انشأ صف جديد لم ادوس على زارارAdd

وشكراا على مساعدتك يا بشمهندس

ربنا يوفققك ويزيدك من علمه

سلام عليكم

تم تعديل هذه المشاركة بواسطة Eng.Hamzawy في 13 مايو 2010 في 18:20

Software Developer
Mahmoudkelany.com


 

#14

لكي تتمكن من الموضوع بشكل أكبر قم ببناء الـ model الخاص بك

قم بالكتابة بالفصحى يا أخي حتى أستطيع التواصل معك بشكل أكبر

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#15
اقتباس
لكي تتمكن من الموضوع بشكل أكبر قم ببناء الـ model الخاص بك

وكيف ذلك ؟

انا اسف يا بشمهندس

بحاول

على ما اعتاد على ذلك

ساصيغ المشكله مره اخرى

Software Developer
Mahmoudkelany.com


 

#16

لماذا عندما اضغط على الزر add لابد من اختيار صف معين

الا يوجد طريقه اعلم بها عدد الصفوف اللى تحتوى على بيانات

واجعل اضافه الصفوف بعد اخر صف يحتوى على بيانات

سوال اخر

لازاله صف من الجدول استخدم الكود التالى

row = radiologyHistoryTable.getSelectedRow();     
   ((DefaultTableModel) radiologyHistoryTable.getModel()).removeRow(row);

عند تنفيذ هذا الكود يحذف الصف بالكامل

عند تكرار هذا الامر اكثر من مره حتى اخر صف فبذلك يتم حذف الصفوف باكملها

احتاج ان يمسح البيانات الموجوده فالصف او يمسح الصف ويضيف صف جديد فارغ فى اخر الجدول

سلام عليكم

تم تعديل هذه المشاركة بواسطة Eng.Hamzawy في 15 مايو 2010 في 20:12

Software Developer
Mahmoudkelany.com


 

#17

السلام عليكم

أخي ابحث عن Jtable Model

JTable مبني على أساس التصميم الشهير المسمى (MVC (model view controller

هذا التصميم يعتمد على تقسيم المكون إلى ثلاثة أقسام

كل قسم منهم لديه الوظيف الخاصة به

View

متخصص بطريقة العرض والألوان والأشكال كل ما يظهر للمتسخدم على الشاشة

Model

متخصص بإدارة البيانات بحيث يحتوي على التراكيب والكائنات التي تمثل البيانات المجردة

Controller

متخصص بالأحداث التي تحصل في طبقة العرض view وتحتاج إلى انعكاس في طبقة البيانات model

مثال عندما تريد عمل برنامج صيدلية فأنت تقوم بتصميم الواجهات التي تظهر للمستخدم بألوانها وخطوطها ومناظرها وتنسيقها

ثم تقوم بعمل تركيب بيانات data structure والذي يحتفظ بقية البيانات المختلفة

في مثالنا الأدوية بأشكالها وأنواعها

عندما تريد حذف دواء فأنت سوف تضغط على زر حذف في قائمة العرض

وسيتم حذف هذا الدواء عن طريق المتحكم

مادخل هذا الكلام بـ Jtable والعمل الخاص بالأخ حمزاوي؟

JTable (ومثله الكثير من المكونات الخاصة بـ swing) يعتمد على هذا التصميم

لذا فإذا أردت أن تقوم بالتحكم بالجدول الخاص بك بشكل تام

فكل ما عليك هو كتابة الـ model الخاص بك

ومن الـ Model تستطيع التحكم في كل شيء

كيف تقوم بكتابة الـ model الخاص بك

اطلع على هذه المشاركة للأخ العيافي

/index.php?showtopic=219487&view=findpost&p=1086130

إذا استصعب عليك أي شيء اعرض محاولاتك وسنرى بإذن الله

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#18
Eng.Hamzawy كتب:

معلش هاتقل عليكوا

مش عارف مش بعرف حل السوال الا لم بعرض السوال الاول ليه مع انى بحاول كتير قبل ما اعرض الحاجه

كنت عاوز لم اضغط على زرار Save

ياخد البينات اللى فالـ Dialog بتاع الصوره التانيه

ويعرضها فالـ Dialog التانى بتاع الصوره الاولى

ياخد البينات ويعرضها فالجدول يعنى

ازاى لانى حاولت معاها كتير

وكمان علشان اول مره استخدم الـ Dialog & Tables

وشكرا

واسف على الازعاج

سلام عليكم

للاضافة فقط هناك طريقة استخدمها انا شخصيا للتحكم في الكائنات تحكما تاما و هي الاتي

وضع كائن بداخل كل class لنفسها بمعني

انا لدي كلاس ممتده من JDialog

و اود استخدامها اكثر من مرة بدون تغيير

اضع بداخلها

Dialog dilog=new Dialog();

و عندما اود استخدامها يكفي ان اضع اسم الكلاس و الكائن كاتالي

Dialog.dilog.......

Ahmed Rageh

#19

شكرا يا اخ علاء

تعبتك معايا والله

بس معلش تحملنى

وان شاء الله لو فيه حاجه

هاسال ولا ايه ؟

اكيد طبعا

ربنا يجعلكم دائما عونا للجميع

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#20

بالطبع أنت تأمر أخي حمزة (إن صحت هل اسمك حمزاوي فعلاً؟؟)

بالنسبة للأخ أحمد راجح

هذه الطريقة غير جيدة في المستقبل

بمعنى لو أردت أن تعدل على الشيفرة في بعض الحالات ستقتلك قتلاً

سأعطيك مثال

أنت تستخدم Jdialog

الآن تريد أن تستخدم JFrame يحتوي على JDialog

(على فرض أن هذا ممكن لم أفحص الموضوع)

ستضطر أن تغير الاسم jdialog إلى jframe في كل مكان كتبت فيه jdialog

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#21
اقتباس
بالطبع أنت تأمر أخي حمزة (إن صحت هل اسمك حمزاوي فعلاً؟؟)

الله يخليك يا اخ علاء

لا طبعا ولا حمزه ولا حمزاوى

اسمى الحقيقى محمود والاسم لا يوجد فيه حمزاوى

موضوع يطول شرحه

هاقبى انزله كموضوع لوحده

ههههههههههه

بس الشهره حمزاوى

ربنا يكثر من امثالك المعاونين

سلام عليكم

Software Developer
Mahmoudkelany.com


 

#22

هههههههههههههههههههه

ماشي يا عم حمزاوي :wink:

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…