البرمجة

تحويل كلاس الكرة ليمتد من JFrame

لتحويل الكلاس Ball ليمتد من JFrame بدلاً من JPanel، يجب تعديل الكود بشكل كبير. نحتاج إلى إنشاء كلاس جديد يمتد من JFrame ونقوم بنقل الكود الحالي لـ Ball إلى هذا الكلاس الجديد. هنا الكود الذي يحقق ذلك:

java
import javax.swing.*; import java.awt.*; public class BouncingBallFrame extends JFrame { private int x = 0, y = 0; private int angleX = 1, angleY = 1; public BouncingBallFrame() { setTitle("BounceBall"); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } @Override public void paint(Graphics g) { super.paint(g); g.fillOval(x, y, 50, 50); } public void move() { if (x + angleX < 0) { angleX = 1; } else if (x + angleX > getWidth() - 50) { angleX = -1; } else if (y + angleY < 0) { angleY = 1; } else if (y + angleY > getHeight() - 50) { angleY = -1; } x = x + angleX; y = y + angleY; } public static void main(String[] args) { BouncingBallFrame bouncingBallFrame = new BouncingBallFrame(); while (true) { bouncingBallFrame.move(); bouncingBallFrame.repaint(); try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } } } }

هذا الكود يعتبر كلاسًا جديدًا يمتد من JFrame مباشرة. يقوم برسم دائرة تتحرك داخل النافذة. لكن يجب الانتباه إلى أن استخدام حلقة while(true) في الكود قد يؤدي إلى تجميد التطبيق، لذلك يفضل استخدام javax.swing.Timer لتحريك الكرة بشكل منتظم.

المزيد من المعلومات

بالطبع! يمكننا إضافة مزيد من المعلومات والتعليقات لتوضيح الكود وعمله. فيما يلي الكود مع تعليقات توضح كل جزء منه:

java
import javax.swing.*; import java.awt.*; public class BouncingBallFrame extends JFrame { private int x = 0, y = 0; // إحداثيات الكرة private int angleX = 1, angleY = 1; // الاتجاه الذي تتحرك فيه الكرة public BouncingBallFrame() { setTitle("BounceBall"); // تعيين عنوان للنافذة setSize(400, 400); // تعيين حجم النافذة setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // تحديد عملية الإغلاق عند إغلاق النافذة setVisible(true); // جعل النافذة مرئية } @Override public void paint(Graphics g) { super.paint(g); // استدعاء الدالة الأم لرسم العناصر الأخرى في النافذة g.fillOval(x, y, 50, 50); // رسم دائرة بالإحداثيات الحالية وأبعاد 50x50 } public void move() { // تحديد اتجاه الحركة والانتقال إلى الاتجاه الجديد if (x + angleX < 0) { angleX = 1; } else if (x + angleX > getWidth() - 50) { angleX = -1; } else if (y + angleY < 0) { angleY = 1; } else if (y + angleY > getHeight() - 50) { angleY = -1; } x = x + angleX; y = y + angleY; } public static void main(String[] args) { BouncingBallFrame bouncingBallFrame = new BouncingBallFrame(); // إنشاء مثيل من الكلاس الحالي // حلقة تقوم بتحريك الكرة وإعادة رسمها بشكل متكرر while (true) { bouncingBallFrame.move(); bouncingBallFrame.repaint(); // إعادة رسم النافذة try { Thread.sleep(10); // توقيف التنفيذ لمدة 10 ميلي ثانية } catch (InterruptedException e) { e.printStackTrace(); } } } }

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

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر