源代码如下(其中其他窗体代码我已省略):
import java.awt.*;
import java.awt.event.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.*;
import java.awt.*;
import java.lang.reflect.Field;
import javax.swing.JLabel;
/**展示面板*/
@SuppressWarnings("serial")
public class BallFrame extends JFrame {
private JPanel Pane ;// 背景面板
private Ball ball = null;// 窗体提供一个小球
//测试方法:
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
BallFrame thisClass = new BallFrame();
thisClass
.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
thisClass.setVisible(true);
}
});
}
/**
* 构造方法
*/
public BallFrame() {
super();
initialize();// 初始程序界面
}
/**
* 初始化程序界面
*/
private void initialize() {
this.setSize(400, 400);// 设置窗体大小
this.setResizable(false);// 禁止调整窗体大小
this.setContentPane(getJContentPane());// 添加内容面板
// 设置窗体标题文本
this.setTitle("开始游戏");
}
/**
* 背景面板
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
int x1=-10;
if (Pane == null) {
ball = new Ball();// 创建第一个小球
// 设置小球位置与大小
ball.setBounds(new Rectangle(10, 300, 20, 20));
// 创建背景面板
Pane = new JPanel();
// 背景面板使用null布局
Pane.setLayout(null);
Pane.add(ball, null);// 添加第一个小球到背景面板
// 为背景面板添加鼠标事件监听器
Icon icon=new ImageIcon("c:/point90.png"); //添加吸管到面板
JLabel jlb=new JLabel(icon);
jlb.setBounds(x1,340, 51, 51);
Pane.add(jlb);
jlb.addKeyListener(new KeyListener() {
public void keyPressed(KeyEvent e){
int x;
x=x1;
if(e.getKeyCode()==KeyEvent.VK_LEFT){
if(x>-10){
x=x-10;
}
}
if(e.getKeyCode()==KeyEvent.VK_RIGHT){
if(x<341){
x=x+10;
}
}
jlb.setBounds(x,340,51,51);
}
@Override
public void keyTyped(KeyEvent e) {
// TODO 自动生成的方法存根
}
@Override
public void keyReleased(KeyEvent e) {
// TODO 自动生成的方法存根
}
});
Pane.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
// 获取面板中控件的数量
int count = Pane.getComponentCount();
double t=0;
// 十分钟的游戏时间
while (t==10) {
if (count <= 400) {// 限制小球数量为400
Ball ball = new Ball();// 创建新的小球对象
Point icon= e.getPoint();// 获取鼠标当前位置
ball.setLocation(icon);// 设置小球为鼠标位置
Pane.add(ball);// 添加小球到面板
} else {// 否则
// 提示小球太多
JOptionPane.showMessageDialog(null,
"球太多啦");
}
}/* else {// 如果单击鼠标右键
if (count < 1) {// 如果面板中没有控件
// 对话框提示信息
JOptionPane.showMessageDialog(null,
"没有球啦");
return;
}
// 移除面板中的第一个控件
Pane.remove(0);
// 重新绘制面板
Pane.repaint();
}*/
}
});
}
return Pane;
}
}
//小球一个内部类:
class Ball extends JLabel implements Runnable {
private int r = 10;// 小球半径
private int width = r * 2;// 球宽度
private int height = r * 2;// 球高度s
private Color ballColor = Color.BLACK;// 默认颜色
/**
* 构造方法
*/
public Ball() {
// 初始化大小
setSize(new Dimension(width, height));
setPreferredSize(new Dimension(width, height));
// 反射获取Color类的所有成员变量数组
Field[] fields = Color.class.getFields();
// 随机生成数组下标索引
int index = (int) (Math.random() * fields.length);
try {
// 获取指定下标索引的成员变量
Object object = fields[index].get(null);
// 判断是否Color类的实例对象
if (object instanceof Color) {
// 改变默认颜色
ballColor = (Color) object;
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// 启动小球跳跃线程
new Thread(this).start();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(ballColor);// 设置默认颜色
g.fillOval(0, 0, width, height);// 绘制球体
}
@Override
public void run() {
// 获取父容器对象
Container parent = getParent();
Point myPoint = getLocation();// 获取初始位置
while (true) {// 循环读取父容器对象
if (parent == null) {
try {
Thread.sleep(50);// 线程休眠
} catch (InterruptedException e) {
e.printStackTrace();
}
myPoint = getLocation();// 获取初始位置
parent = getParent();
} else {// 如果已经获取到父容器
break;// 跳出循环
}
}
int sx = myPoint.x;// X坐标
int sy = myPoint.y;// y坐标
int step = 10;// 移动步进
int t=0;
step = 1;// 移动步进
int dy =1;// 垂直步进值
// 随机移动速度
int stime = 10;
while (parent.isVisible()) {
int parentWidth = parent.getWidth();// 容器宽度
int parentHeight = parent.getHeight();// 容器高度
setLocation(sx, sy);
try {
Thread.sleep(stime);
} catch (InterruptedException e) {
e.printStackTrace();
}
sy = sy + dy;// 垂直坐标偏移1个像素
// 检测垂直边界
if (sy > parentHeight - height - 35 || sy - 20 < 0)
{ dy = -dy;// 防止坐标超出垂直边界
t++;
}
if(t==2)
{ sy=0;
dy=0;
}
}
}
}
要求:我想实现图片的键盘左右移动,而且泡泡垂直上升碰到其他泡泡如果是三个不同颜色的则消掉这三个不是则停止上升,泡泡碰到图片就停止,如果有泡泡龙JAVA EE的源代码发来参考的话感激不尽