编写一个窗体的类BallFrameDemo:

package com.lzy.ball;

import javax.swing.JFrame;

public class BallFrameDemo extends JFrame {

JFrame

frame; public

BallFrameDemo(){ frame=new

JFrame(); } public void

showSony(){ frame.setSize(800, 600);

frame.setTitle("多个小球的碰壁反弹");

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setResizable(false); //禁止最大化

frame.setLocationRelativeTo(null); //居中显示

BallPanelDemoA panel=new

BallPanelDemoA();

Thread td=new

Thread(panel);

td.start();

frame.add(panel);

frame.setVisible(true);

}

public static void main(String[] args)

{ new

BallFrameDemo().showSony();

}

}

编写一个面板类BallPanelDemoA:

package com.lzy.ball;

import java.awt.Color;

import java.awt.Graphics;

import java.util.Random;

import javax.swing.JPanel;

public class BallPanelDemoA extends JPanel implements Runnable

{

Random random;

BallDemo[] balls;

int

size=6; //设置小球的个数

public BallPanelDemoA(){

random=new Random();

balls=new BallDemo[size];

for(int

i=0;i

balls[i]=new

BallDemo(random.nextInt(700),random.nextInt(500),20+i*2,new

Color(random.nextInt(255),random.nextInt(255),random.nextInt(255)));

}

}

@Override

public void paint(Graphics g) {

super.paint(g);

this.setBackground(Color.BLUE);

for(int

i=0;i

balls[i].draw(g);

}

}

@Override

public void run() {

while(true){

for(int i=1;i

for(int j=0;j

balls[i].setPanel(this);

balls[i].move();

balls[j].setPanel(this);

balls[j].move();

if(balls[i].twoBallisHit(balls[j])){ //当两球相撞时,把一个球的半径设为0,相当于消失了,看不见了;

balls[i].setR(30);

balls[j].setR(0);

}

}

}

try {

Thread.sleep(50);

} catch

(InterruptedException e) {

//

TODO Auto-generated catch block

e.printStackTrace();

}

repaint();

}

}

}

把小球封装在BallDemo中:

package com.lzy.ball;

import java.awt.Color;

import java.awt.Graphics;

import javax.swing.JPanel;

public class BallDemo {

private int x;

private int y;

private int r;

private Color color;

private JPanel panel;

private int flag=0;

public static final int

LEFT_DOWN=0; //小球的运行轨迹为左下:x++;y++

public static final int

LEFT_UP=1; //小球的运行轨迹为左上:x++;y--

public static final int

RIGHT_DOWN=2; //小球的运行轨迹为右下:x--;y++

public static final int

RIGHT_UP=3; //小球的运行轨迹为右上:x--;y--

public BallDemo(){}

public BallDemo(int x, int y, int r, Color color)

{ //通过写一个带参数的构造方法,方便BallDemo的对象把值传进来;

this.setX(x);

this.setY(y);

this.setR(r);

this.setColor(color);

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public int getR() {

return r;

}

public void setR(int r) {

this.r = r;

}

public Color getColor() {

return color;

}

public void setColor(Color color) {

this.color = color;

}

public JPanel getPanel() {

return panel;

}

public void setPanel(JPanel panel) {

this.panel = panel;

}

public int getFlag() {

return flag;

}

public void setFlag(int flag) {

this.flag = flag;

}

public void draw(Graphics

g){ //在小球的自己类里面画小球,方便在外面调用数组获取多个小球;

g.setColor(color);

g.fillOval(x, y, 2*r,

2*r);

} public void

move(){ //每个小球都有自己的move()方法,用来判断自己的位置;

switch (this.flag) {

case LEFT_DOWN:

x++;

y++;

if(x>panel.getWidth()-2*r){

this.flag=RIGHT_DOWN;

}

if(y>panel.getHeight()-2*r){

this.flag=LEFT_UP;

}

break;

case LEFT_UP:

x++;

y--;

if(x>panel.getWidth()-2*r){

this.flag=RIGHT_UP;

}

if(y<0){

this.flag=LEFT_DOWN;

}

break;

case RIGHT_DOWN:

x--;

y++;

if(y>panel.getHeight()-2*r){

this.flag=RIGHT_UP;

}

if(x<0){

this.flag=LEFT_DOWN;

}

break;

case RIGHT_UP:

java 滚动小球_Java语言编写一个程序:在面板中多个小球浮动,碰到边缘则反弹,小球和小球想撞得话,其中一个就消失...相关推荐

  1. c语言编写天气预报程序,在Deno中构建一个命令行天气预报程序

    在本文中,我将通过安装Deno运行时,并创建一个命令行天气程序,该程序将把一个城市名称作为参数,并返回未来24小时的天气预报. 要为Deno编写代码,我强烈建议将Visual Studio Code与 ...

  2. C语言编写一个赋值程序,实验2 用C语言编写简单程序——2.1 基本数据处理.doc

    实验2 用C语言编写简单程序--2.1 基本数据处理 实验2 用C语言编写简单程序 2.1 基本数据处理 [实验目的] (1)掌握算术表达式和赋值表达式的使用. (2)掌握基本输出函数的使用. (3) ...

  3. Fork and Join: Java也可以轻松地编写并发程序 原文地址 作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zi

    Fork and Join: Java也可以轻松地编写并发程序 原文地址   作者:Julien Ponge 译者:iDestiny 资源下载: Java SE 7 Sample Code(Zip) ...

  4. java实验多线程机制_使用Java多线程的同步机制编写应用程序 PDF 下载

    使用Java多线程的同步机制编写应用程序 PDF 下载 本站整理下载: 相关截图: 主要内容: 一. 实验名称 使用Java多线程的同步机制编写应用程序 二. 实验目的及要求 1.理解并行/并发的概念 ...

  5. 心碎的图案怎么用c语言编出来,教案实验2用c语言编写简单程序.doc

    教案实验2用c语言编写简单程序 实验2 用C语言编写简单程序 2.1 基本数据处理1.调试示例 改正下列程序中的错误,求华氏温度100oF对应的摄氏温度?计算公式如下,其中:c 表示摄氏温度,f 表示 ...

  6. 用 C 语言编写的程序被称为,用c语言编写的程序被称为

    快速导读: Q1:用C语言编写以下程序 #includeintmain(void){ intm,n,i,t; printf("InputM,N(int0if(scanf("%d%d ...

  7. 自学java编译老是出错_编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思...

    编写HelloWorld程序编译时提示写入HelloWorld时出错是什么意思 这个能出错的地方就难说了,能给出代码或者错误提示吗 为什么javac编译后说写入错误呢HelloWorld.java : ...

  8. 用PL/SQL语言编写一程序,实现按部门分段(6000以上、(6000,3000)、3000元以下)统计各工资段的职工人数、以及各部门的工资总额(工资总额中不包括奖金)

    用PL/SQL语言编写一程序,实现按部门分段(6000以上.(6000,3000).3000元以下)统计各工资段的职工人数.以及各部门的工资总额(工资总额中不包括奖金) 输出到一张表中 直接输出在屏幕 ...

  9. c语言万年历代码作业,用c语言编写万年历程序

    用c语言编写万年历程序 <C 程序设计>课程设计报告 2011-2012学年第二学期 设计题目:万年历的设计 指导教师: 李素若 完成时间:2012 年 6月 1日至 2011年 6月 2 ...

最新文章

  1. 网络推广外包之下“真我”徐起表示今年中国区定下进军2000万销量目标
  2. 通达信版弘历软件指标_通达信弘历趋势王指标
  3. maven中的snapshot来源与注意事项
  4. android 查看多个图片,android提取视频多张图片和视频信息
  5. 职称计算机怎么练,2017职称计算机windows操作训练题
  6. 计算机二级试题17,《计算机二级考试试题及答案17》.doc
  7. 谭浩强c语言图文,c语言谭浩强(图文教程).ppt
  8. (Python)计算器的设计与实现
  9. 数据智能、孪生城市——展望未来智慧城市产业发展
  10. IT行业都有哪些职位,初学者(0基础,新人)该如何选择,才能够快速进入这个行业?...
  11. 互联网广告人--联合御寒--品牌,代理,平台,达人 多方携手御寒
  12. html表格美化模板,JavaScript + CSS 美化出的条纹表格样式
  13. Windows环境下使用Internet Information Service( IIS)管理器上搭建Web资源网站
  14. [转]情侣相处最佳模式
  15. C++到底还能做什么?【献给不知道学什么技术的人】
  16. 不可重复读和幻读的区别
  17. C语言前驱和后继字母,数据结构(c语言)3.ppt
  18. Windows Server 下文件同步
  19. 华为ensp,交换网络的构建与配置
  20. atom下载、插件安装 与 快捷键

热门文章

  1. Java实战—POI操作Excel文档、读取、写入、合并单元格
  2. bugkuweb题-ctf入门(18-34)
  3. Python pprint模块
  4. Java开发中的eclispe常用快捷键全部快捷键
  5. Spring 使用详解
  6. 替代谷歌、雅虎、必应的十大搜索引擎(2)
  7. 【​观察】D轮累计融资6亿元之后 新氧开启医美行业赋能之路
  8. mysql如何进行分区_mysql如何进行分区_mysql分区有哪些方法
  9. 亚马逊养号Selenium自动化工具介绍,配合vmlogin中文版工具试用说明
  10. 添加购物车的基本流程