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

كيف استطيع نفل panel من فريم الى فريم آخر

مغلق
بدأه waheed11 في 19 نوفمبر 2005 · 7 رد · 592 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عندي سؤال سريع في الجافا و ارجو المساعدة

عندي كلاس فيه Panel و ابغى انقل هذه الـ Panel إلى كلاس آخر. يعني ابغى نفس الـ panel , تشتغل في الكلاسين

حاولت اكثر من طريقة ولا نفعت

#2

أنت تقصد كيف تنقل panel من Frame إلى Frame آخر..

لا أدري لماذا تريد فعل ذلك،، راجع طريقة تصميم شفرتك أو اطرحها هنا،، لكن الموضوع سهل بإذن الله،، وهو أن تحذف panel من الأول وتنقله إلى الثاني..

JPanel panel=new SpecialPanel();
JFrame frame=new JFrame();
JFrame frame2=new JFrame();

frame.add(panel);
frame.remove(panel);
frame2.add(panel);

لكني أرجع وأقول تأكد إن كنت فعلا تحتاج إلى ذلك! بالتوفيق!!

#3

شكرا لك اخي ابو مازن على تجاوبك

و يمكن انت مافهمت قصدي مضبوط

أولاً : الكلاس الاول Motorو هو عبارة عن فريم يوجد فيه إثنين Panel :

الاولي panelCenter و يوجد فيها مجموعة من مربعات النص وهي في مركز الفريم بإستخدام LayoutManger

الثانية panelSouth و يوجد فيها عدد 2 ازرار واحد للحفظ و الثاني للإلغاء و يوجد اسفل الفريم (South )

بالنسبة للكلاس الثاني DisplayMotor الفريم الذي اريد أن انقل البانل الاولى اليه (panelCenter ) , اريده أن يحتوي على

إثنين Panel :

الاولى : ستكون هي نفس panelCenter الموجوده في الكلاس Motor , يعني بدل ما اسوي وحدة جديدة و اكتب و اضيف جميع محتوياتها , ابغى استخدم panelCenter و سأضعها في يمين الفريم East

الثانية : ستكون JList يسار الفريم بحيث تضهر أرقام الـ motor و التي تم كتابتها وحفظها من الكلاس الاول مع بقية معلومات الـ motor

و عندما أختار واحدة من الاقام في الـ JList فأن معلوماته ستظهر من خلال مربعات النص التي موجودة في panelCenter

أتمنى أن اكون قد وضحت المطلوب بشكل اوضح

مع كل شكري وتقديري للجميع

#4

حسنا،، أعتقد أني فهمت،،، أنت تعمل برنامج يعرض لك أنواع سيارات أو محركات مثلا في عدة واجهات رسومية.،

إليك تصميما لذيذا....

أولا نصنع فئة تحمل المعلومات للمحرك Motor الذي نريد..

public class Motor{
int id; 
String name;
double price;
public Motor(int id, String n, double v){
this.id=id;
name=n;
value=v;
}
public int getID(){return id;}
public String getName(){return name;}
public double getValue(){return value;}
}

بعد هذا،،، بدل أن نصنع JFrame،، نصنع JPanel يعرض لنا معلومات Motor معين.. (أعني بهذا panelCenter التي في حوزتك)

public class MotorInfoDisplayPanel extends JPanel{
Motor motor;
public MotorInfoDisplayPanel(){
initComponenets(); // اصنع الحقول التي ستظهر المعلومات كما تريد..
}
public void setMotor(Motor m){
motor=m;
displayInfo();
}
private void displayInfo(){
if(motor==null)return;
jLabel1.setText(motor.getName());
jLabel2.setText(motor.getValue()+"");

}
}

والآن اصنع JFrame الأول الذي فيه center و south وعند الإضافة تكتب:

public class MyFrame extends JFrame{
MotorInfoDisplayPanel motorPanel;
JFrame(){

motorPanel = new MotorInfoDisplayPanel();
add(motorPanel, BorderLayout.SOUTH);
//code
motorPanel.setMotor(new Motor(10, "good Car", 10000));
}
}

وعند صناعة JFrame آخر،، تستعمل نفس الفئة وتصنع JPanel جديد، أقصد MotorInfoDisplayPanel وتضعه في الشرق أو في الغرب...

لاحظ أنك تريد أن تصنع JList في معلومات، وتريد إذا ضغط المستخدم على معلومة معينة تظهر في MotorInfoDisplayPanel،، كل ما عليك الآن،، أن تكتب أمرا واحدا..

motorPanel.setMotor(choosenMotor);

..........

لاحظ معي أننا لم نكتب تصميم شفرة centerPanel التي تريد إلا مرة واحدة،، وتستطيع استخدامها متى أردت وأين أردت..

أرجو أن يكون المثال واضحا،،ولا تتردد في السؤال..

بالتوفيق!!

#5

ولمزيد من المعلومات راجع /index.php?showtopic=80683

بالتوفيق... :)

#6

:D شكرا ما قصرت وجزاك الله خيراً

يعني انا الحين فهمت انه بدل أن نصنع JFrame،، نصنع JPanel يعرض لنا معلومات Motor معين..

هذي طريقة تصميم فعلا جميلة و تسمح بإستخدام نفس الـ Panel اكثر من مرة في اي مكان من البرنامج

اكرر شكر

بس اشقصدك (:

:D

#7

معليش عندي تعقيب بسيط:

مافي طريقة تسمح لنا بأن اخذ Panel من داخل فريم لنستخدمها في فريم آخر بدون أن نعمل لها كلاس مستقل

#8

عليك بحذفها من ال Frame الأول وإضافتها في الثانية..

public FirstFrame extends JFrame{
JPanel panel;
JFrame secondFrame;

FirstFrame(){

//code
}

public void switch(){
remove(panel);
seconfFrame.setSpecialPanel(panel);

}
}

بالتوفيق!!..

مع أني مازلت أقترح عليك مراجعة تصميمك!

تم تعديل هذه المشاركة بواسطة أبومازن في 19 نوفمبر 2005 في 16:30

هذا الموضوع مغلق.

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