هدا البرنامج عباره عن يطبيق بسيط للثريد بحيث انه بعد الضغط على الزر تنطلق كره في اطار المربع وعند الضغط مره اخرى تنظلق كره اخرى وهكدا...الا اني اردت ان اصنع مربع اخر اسفل الاول فقمت بعمل كلااس Ball_1 على غرار الكلااس Ball وقمت فقط بتغيير
احداثيات المربع الدي تتحرك بداخله الكرات بحيث يعمل بشكل موازي للاؤل وطبعا عمل الابجكت الدي يستدعي الفنكشن ()ball_1.start
لكن التغيير لم يحدث اي اثر على البرنامج....ياترى لمادا؟
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
public class Bouncer_1 extends Applet implements ActionListener {
private Button start, stop;
private Ball ball;
private Ball_1 ball_1;
public void init() {
start = new Button("Start");
add(start);
start.addActionListener(this);
stop = new Button("Stop");
add(stop);
stop.addActionListener(this);
}
public void actionPerformed(ActionEvent event) {
if (event.getSource() == start) {
Graphics g = getGraphics();
ball = new Ball(g);
ball_1 = new Ball_1(g);
ball_1.start();
ball.start();
}
if (event.getSource() == stop)
ball.pleaseStop();
ball_1.please_1Stop();
}
}
class Ball extends Thread {
public boolean keepGoing;
private Graphics g;
private int x = 7, xChange = 7;
private int y =0, yChange = 2;
private int diameter = 10;
private int rectLeftX = 0, rectRightX = 100;
private int rectTopY = 0, rectBottomY = 100;
public Ball(Graphics graphics) {
g = graphics;
keepGoing = true;
}
public void pleaseStop() {
keepGoing = false;
}
public void run() {
g.drawRect(rectLeftX, rectTopY,
rectRightX - rectLeftX, rectBottomY - rectTopY);
while (keepGoing) {
g.setColor(Color.white);
g.fillOval (x, y, diameter, diameter);
if (x + xChange <= rectLeftX)
xChange = -xChange;
if (x + xChange >= rectRightX)
xChange = -xChange;
if (y + yChange <= rectTopY)
yChange = -yChange;
if (y + yChange >= rectBottomY)
yChange = -yChange;
x = x + xChange;
y = y + yChange;
g.setColor(Color.red);
g.fillOval (x, y, diameter, diameter);
try {
Thread.sleep(50);
}
catch (InterruptedException e) {
System.err.println("sleep exception");
}
}
}
}
class Ball_1 extends Thread {
private boolean keepGoing;
private Graphics g;
private int x2 = 7, xChange2 = 7;
private int y2 = 0, yChange2 = 2;
private int diameter2 = 10;
private int rectLeftX2 = 0, rectRightX2 = 100;
private int rectTopY2 =120, rectBottomY2 = 100;
public Ball_1(Graphics graphics) {
g = graphics;
keepGoing = true;
}
public void please_1Stop() {
keepGoing = false;
}
public void run() {
g.drawRect(rectLeftX2, rectTopY2,
rectRightX2 - rectLeftX2, rectBottomY2 - rectTopY2);
while (keepGoing) {
g.setColor(Color.white);
g.fillOval (x2, y2, diameter2, diameter2);
if (x2 + xChange2 <= rectLeftX2)
xChange2 = -xChange2;
if (x2 + xChange2 >= rectRightX2)
xChange2 = -xChange2;
if (y2 + yChange2 <= rectTopY2)
yChange2 = -yChange2;
if (y2 + yChange2 >= rectBottomY2)
yChange2 = -yChange2;
x2 = x2 + xChange2;
y2 = y2 + yChange2;
g.setColor(Color.red);
g.fillOval (x2, y2, diameter2, diameter2);
try {
Thread.sleep(50);
}
catch (InterruptedException e) {
System.err.println("sleep exception");
}
}
}
}
اقتباس