初次接触对图形操作的问题,实在不会了,请教。问题:对通过多线程产生的各个球分别进行操作,判断再次点击处是否在图形上,这个判断整不了,下面是代码,由于长度限制的问题省略了部...
初次接触对图形操作的问题,实在不会了,请教。
问题:对通过多线程产生的各个球分别进行操作,判断再次点击处是否在图形上,这个判断整不了,下面是代码,由于长度限制的问题省略了部分系统自动添加代码。
package mypaint;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Random;
import javax.swing.JFrame;import javax.swing.JPanel;
public class MyPaint {
/**
* @param 在鼠标点击处启动多线程,产生一个球,下落。
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyFrame();
}
}
class MyFrame extends JFrame implements MouseListener {
/**
*
*/
private static final long serialVersionUID = 1L;
Point p;
JPanel jp;
JPanel locate;
MyFrame() {
super("画图");
jp = new JPanel();
jp.setBounds(0, 0, 800, 600);
this.add(jp);
this.jp.addMouseListener(this);
// 设置窗体的位置和大小
this.setBounds(200, 50, 800, 600);
this.setResizable(false);
this.setVisible(true);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
//怎么在这里加一个事件,让此程序可以实现:单击在某个球上时可以对这个球进行控制,如让其暂停,对图形的操作,
//这个位置的判断不会。。。。
}
public void mouseClicked(MouseEvent e) {
// TODO Auto-generated method stub
p = e.getPoint();
Random r = new Random();
Ball ball = new Ball(p.x , p.y );
// Ball ball = new Ball(r.nextInt(600), 10);
ball.start();
}
class Ball extends Thread {
int start_x, start_y; int ball_size = (int)(Math.random()*30);
Ball(int i, int j) {
start_x = i-ball_size/2;
start_y = j-ball_size/2;
}
public void run() {
Graphics g = jp.getGraphics();
// int x = 0, y = 0;
// 计算画球时X轴,Y轴的最大坐标
int HuaBan_x = 800 - ball_size;
int HuaBan_y = 570 - ball_size;
// 球移动的增量
Random r1 = new Random();
Random r2 = new Random();
int x_increase = r1.nextInt(20)-10, y_increase = r2.nextInt(20)-10;
while (true) {
// 将上一次画的球擦掉
g.setColor(jp.getBackground());
g.fillOval(start_x, start_y, ball_size, ball_size);
// 画球
g.setColor(Color.blue);
start_x = start_x + x_increase;
start_y = start_y + y_increase;
g.fillOval(start_x, start_y, ball_size, ball_size);
// 判断球是否到达了边界,若到达了则转向
if (start_x <= 0 || start_x >= HuaBan_x)
x_increase = -x_increase;
if (start_y <= 0 || start_y >= HuaBan_y)
y_increase = -y_increase;
try {
// 休眠一段时间
Thread.sleep(30);
} catch (Exception e) {
}
}
}
}}
展开