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

التنقل بين JFrame و نقل المتغيرات

بدأه sahraoui dhelim في 26 يوليو 2011 · 16 رد · 1,115 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا اعلام ان هذا الموضوع مكرر لقد قرات عدة مواضيع تتحدث عنه لكن لم افهم اي منها

انا عندي فورم اسمها F1 بها متغير اسمه moy_gen من نوع double

و فورم اخرى اسمها succes بها JLabel اسمها jLabel3

اريد ان يتم اظهار moy_gen في jLabel3 عند الضغظ على زر لذا كتبت الكود التالي في F1

 suc.setVisible(true);
    suc.show();
    this.hide();

المشكل هو كيف انقل المتغيرات لاني عندما اكتب السطر

suc.jLabel3.setText(moy_gen+"");

يقول الخطا ان الشىء jLabel3 محمي بي Privet وعندما حاولت تغيرها لي Public يمنعك من التعديل

قمت بي كتابت الكود التالى في مشيد الفورم succes

F1 f1=new F1();
        jLabel3.setText(f1.moy_gen+"");

و المشكل هو ان المتغير يظهر دائما قيمة الصفر مع ان المفروض هو انها قيمة اخرا

تم تعديل هذه المشاركة بواسطة sahraoui17 في 26 يوليو 2011 في 17:48

#2

سوالك هذا موجود من قبل كثيرا

فيمكنك البحث عنه باستخدام محرك البحث

لكن ممكن اقولك على حاجه سريعه

اعمل getter method للمتغير دا

واستخدمه

Software Developer
Mahmoudkelany.com


 

#3

يمكنك تغيير المتغير moy_gen إلى static عند تعريفه في الكلاس F1

public static double moy_gen;

وهكذا يمكنك استدعاء المتغير moy_gen بالطريقة التالية:

jLabel3.setText(F1.moy_gen+"");
1
597657.png
#4

باركا الله فيكم يا جماعة

لقد نجحت طريقة ال static

انا اعرف جيد مفاهيم OOP و كنت اعلام مفهوم ال static

لكن اتضحلي انه لا يمكنك تعلم شىء بدون تطبيق

و اقول لي الاخ محمود ان محرك البحث الخاص بي المنتدى على الرغم من انه سريع الا انه غالبا ما يعطي نتائج عشوائية شكرا على التنبيه على اي حال

#5

حل جيد اخ فؤاد

لكن اقتراح محمود افضل encapsulation

على كل كلاهما صحيح

تحياتى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#6
Eng.Fouad كتب:

يمكنك تغيير المتغير moy_gen إلى static عند تعريفه في الكلاس F1

public static double moy_gen;

وهكذا يمكنك استدعاء المتغير moy_gen بالطريقة التالية:

jLabel3.setText(F1.moy_gen+"");

لكن هذا غير صحيح فى بعض الاحوال

- مبدا الـ static انه موحد على جميع الكائنات التى تأخذ من هذه الفئة

فبالتالى ستجد قيمته ثابته على جميع الكائنات التى ممكن ان تصنعها من هذه الفئة

- وايضا اذا قومت باستدعاء المتغير مباشره

F1.moy_gen من اى مكان داخل برنامجك

فذلك ستجد فيه Zero

فالافضل انك تستدعيه على object لضمان انه يحتوى على قيمه

ومبدا الـ Encapsulation ايضا

- ومش كل متغير هأعمله static علشان احصل عليه

اعتقد انه حل شغال حاليا لكن ماذا تتوقع فى المستقبل blink.gif

Software Developer
Mahmoudkelany.com


 

#7
اقتباس

اعتقد انه حل شغال حاليا


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#8

كما ذكر الإخوة حل الـ static سئ جداً

الأفضل إنك تمرر moy_gen في مشيد succes وتعرض القيمة

وبخصوص getter method فستصعب تعديل الشفرة عندما مثلاً

تريد تغيير Jlabel إلى صورة أو غيره.

#9
log.txt كتب:

وبخصوص getter method فستصعب تعديل الشفرة عندما مثلاً

تريد تغيير Jlabel إلى صورة أو غيره.

ممكن توضح اكثر؟؟؟

Software Developer
Mahmoudkelany.com


 

#10
Mahmoud Kelany كتب:

ممكن توضح اكثر؟؟؟

بـ getter Method سيكون استخدام Succes كتالي :

suc = new Succes(parent,true);
suc.getJLabel3().setText(f1.moy_gen+"");
.,........
......

المشكلة الواضحة أن منطق كائن Succes خارجه,,

الأمر الآخر في حال أراد أن يغير الـ jLabel3 إلى أي أداة أخرى

بدل أن يعدلها من داخل كائن Succes عليه أن يذهب ليعدل

أي موقع استخدم فيه Succes.

دمت بود

تم تعديل هذه المشاركة بواسطة log.txt في 27 يوليو 2011 في 01:25

#11

طب ما انا لو مررت القيمه فى مشيد الفئة

لو غيرته فى مكان معين هاروح اغيره فى كل الامكان اللى استخدمته فيها

تانى حاجه هو غير يتحمل تمن تغييره للحاجه دى

امال تقبى اسمها تتغير ازاى

ثانيا مش كل حاجه هابعتها فى المشيد

ومش كل حاجه هاكون عاوزها فى بدايه تكوين الفئة

Software Developer
Mahmoudkelany.com


 

#12
اقتباس

الأمر الآخر في حال أراد أن يغير الـ jLabel3 إلى أي أداة أخرى

لم اكن اقصد هذه الطريقة

كنت اقصد ان يعمل متغير من نوع double داخل الفئة الخاصة بالنافذة

private double Salary = 0;

public void setSalary(double salary){
this.salary = salary
jLabel3.setText(salary + "");
}

public double getSalary(){
return this.salary;
}

لاحظ انه فى الدالة setSalary يتحكم فى طريقة التعامل مع المتغير ويعرضه كيفما يشاء

اذا ال setters , getters ستلعب على خاصية double salary وليس على اى جزء اخر من الفئة سواء label او غيره

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#13

يبدوا أنه لم يتضح لك ما أقصد..

دعني أصيغ هذا السؤال لو كان لدي كائن يعرض رسالة للمستخدم هل نجح في الإختبار أم لا اعتماداً

على درجته في الاختبار ما هي طريقة تصميم هذا الكائن ؟

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

لجراف غيرها بسهولة بدون أن يعدل على الكائنات الأخرى التي تستخدمه

أو getterMethod لمنطقة العرض بحيث ترسم أو تكتب النتيجة بنفسك ويصبح الكود مستعصي على التغيير.

وهذا لا ينطبق على المثال السابق بل من الأمثلة التي تحضرني JFileChooser فمثلاً إذا أردت أن تقترح اسم الملف

في عملية حفظ هل تحصل على jtextfield و تستخدمه بنفسك أم يكون encapsulated

و الـ jcombobox الذي يعرض صيغ الملفات مثال آخر ,, ولو تابعت مكتبات الجافا لو جدتها مصممة بهذا الأسلوب.

Mahmoud Kelany كتب:

ثانيا مش كل حاجه هابعتها فى المشيد

ومش كل حاجه هاكون عاوزها فى بدايه تكوين الفئة

أتفق معك هنا.

ولكن حتى القيم التي لا أحتاج أن أضعها

من البداية أعمل لها setter Method

تم تعديل هذه المشاركة بواسطة log.txt في 27 يوليو 2011 في 02:27

#14
MOHAMED FATHEI كتب:

لم اكن اقصد هذه الطريقة

كنت اقصد ان يعمل متغير من نوع double داخل الفئة الخاصة بالنافذة

private double Salary = 0;

public void setSalary(double salary){
this.salary = salary
jLabel3.setText(salary + "");
}

public double getSalary(){
return this.salary;
}

لاحظ انه فى الدالة setSalary يتحكم فى طريقة التعامل مع المتغير ويعرضه كيفما يشاء

اذا ال setters , getters ستلعب على خاصية double salary وليس على اى جزء اخر من الفئة سواء label او غيره

أخ محمد فهمت هذا منك لأنك ذكرت encapsulation في ردك.

تعديل: معذرة ظننت الرد موجهاً لي

تم تعديل هذه المشاركة بواسطة log.txt في 27 يوليو 2011 في 02:36

#15
MOHAMED FATHEI كتب:

لاحظ انه فى الدالة setSalary يتحكم فى طريقة التعامل مع المتغير ويعرضه كيفما يشاء

اذا ال setters , getters ستلعب على خاصية double salary وليس على اى جزء اخر من الفئة سواء label او غيره

لكن ماذا لو اردة الكتابة في مركبة اخرى مثلا jLabel5 انا اذا مضطر لي كتابة دالة اخري وبالتالى اصبح اكرر الدوال

#16

بسيطة

public void setSalary(double salary){
    this.salary = salary;
    jLabel3.setText(salary + "");
    jLabel5.setText(salary + "");
}

ميزة هذه الطريقة انها تمنحك حرية معالجة هذا المتغير داخل الفئة او النافذة


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#17

بارك الله فيكم يا شباب

:ty:

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