لتحويل الكلاس Ball
ليمتد من JFrame
بدلاً من JPanel
، يجب تعديل الكود بشكل كبير. نحتاج إلى إنشاء كلاس جديد يمتد من JFrame
ونقوم بنقل الكود الحالي لـ Ball
إلى هذا الكلاس الجديد. هنا الكود الذي يحقق ذلك:
javaimport 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
لتحريك الكرة بشكل منتظم.
المزيد من المعلومات
بالطبع! يمكننا إضافة مزيد من المعلومات والتعليقات لتوضيح الكود وعمله. فيما يلي الكود مع تعليقات توضح كل جزء منه:
javaimport 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();
}
}
}
}
هذا الكود ينشئ نافذة تحتوي على كرة تتحرك بين الحواف. يتم تحديد اتجاه حركتها بشكل عشوائي، وتقوم بتحديث موقعها وإعادة رسمها بشكل مستمر.