Java---实力弹弹球,弹弹弹
直接上代码了。
微调按钮加画布画几个圆,再实现监听。。。
package cn.hncu.threadDemo.thread2;
import java.awt.Canvas;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class BallsJFrame extends JFrame implements ChangeListener{
private BallsCanvas ball;
private JSpinner spinner;
public BallsJFrame(){
super("弹弹球");
this.setBounds(300, 200, 400, 300);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
Color colors[] = {Color.red,Color.green,Color.blue,Color.magenta,Color.cyan};
ball = new BallsCanvas(colors,100);
this.getContentPane().add(ball);//默认是CENTER位置
JPanel panel = new JPanel();
this.getContentPane().add(panel,"South");
panel.add(new JLabel("Delay"));
spinner = new JSpinner();
spinner.setValue(100);
panel.add(spinner);
spinner.addChangeListener(this);
this.setVisible(true);
}
@Override
public void stateChanged(ChangeEvent e) {
int value = Integer.parseInt(""+spinner.getValue());
ball.setDelay(value);
}
public static void main(String[] args) {
new BallsJFrame();
}
}
class BallsCanvas extends Canvas implements ActionListener, FocusListener{
private Ball balls[];//存放所有的球
private Timer timer;//javax.swing.Timer
public BallsCanvas(Color colors[] ,int delay){
this.balls = new Ball[colors.length];
for(int i=0,x=40;i<colors.length;i++,x+=20){
this.balls[i] = new Ball(x,x,colors[i]);
}
//让当前画布监听 焦点事件
this.addFocusListener(this);
timer = new Timer(delay,this);
timer.start();
}
public void setDelay(int delay){
timer.setDelay(delay);
}
@Override
public void paint(Graphics g) {
for(int i=0;i<this.balls.length;i++){
g.setColor(balls[i].color);
//让每个球的坐标变化一下---(x坐标)
balls[i].x = balls[i].left ? balls[i].x-10:balls[i].x+10;
//当球碰壁时,更改球的方向
if(balls[i].x<=0||balls[i].x>=this.getWidth()-24){
balls[i].left = !balls[i].left;//切换方向
}
//让每个球的坐标变化一下---(y坐标)
balls[i].y = balls[i].up ? balls[i].y-10:balls[i].y+10;
//当球碰壁时,更改球的方向
if(balls[i].y<=0||balls[i].y>=this.getHeight()-22){
balls[i].up = !balls[i].up;//切换方向
}
g.fillOval(balls[i].x, balls[i].y, 20, 20);
}
}
@Override
public void actionPerformed(ActionEvent e) {
//System.out.println("aaa");
repaint();//刷新画布.调用paint(Graphics g)
}
@Override
public void focusGained(FocusEvent e) {
timer.stop();
}
@Override
public void focusLost(FocusEvent e) {
timer.restart();
}
private static class Ball{
int x,y;
boolean up,left;
Color color;
public Ball(int x, int y, Color color) {
this.x = x;
this.y = y;
this.color = color;
up = left = false;
}
}
}
Java---实力弹弹球,弹弹弹的更多相关文章
- Html5最简单的游戏Demo——Canvas绘图的弹弹球
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- Java基础-程序流程控制第二弹(循环结构)
Java基础-程序流程控制第二弹(循环结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制有三种基本结构:顺序结构,选择结构和循环结构.一个脚本就是顺序结构执行的,选择结 ...
- Java基础-程序流程控制第一弹(分支结构/选择结构)
Java基础-程序流程控制第一弹(分支结构/选择结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.if语句 1>.if语句的第一种格式 if(条件表达式){ 语句体: ...
- Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)
一.实际项目中有很多如下界面效果. 二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码: <!DOCTYPE html> <html> & ...
- 关于Android 打开新的Activity 虚拟键盘的弹出与不弹出
关于Android 打开新的Activity 虚拟键盘的弹出与不弹出 打开Activity 时 在相应的情况 弹出虚拟键盘 或者 隐藏虚拟键盘 会给用户非常好的用户体验 , 实现起来也比较简单 只需 ...
- 弹性ScrollView,和下啦刷新的效果类似 实现下拉弹回和上拉弹回
今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个很多需求都用的这种效果 其实这是一个自定义的scrollView,上代码,这是我写在一个公共的组件包里的 package com.p ...
- layer弹出框确定前验证:弹出消息框(弹出两个layer)
作者QQ:1095737364 QQ群:123300273 欢迎加入! layer 弹出框中经常遇到要弹出表单进行修改数据, 因此在弹出框中的表单需要验证数据, 就需要在弹出一个layer, 默认的设 ...
- 弹性ScrollView,和下啦刷新的效果相似 实现下拉弹回和上拉弹回
今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个非常多需求都用的这样的效果 事实上这是一个自己定义的scrollView,上代码.这是我写在一个公共的组件包里的 package c ...
- Java制作桌面弹球下载版 使用如鹏游戏引擎制作 包含2个精灵球同时弹动
package com.swift; import com.rupeng.game.GameCore; public class DesktopBouncingBall implements Runn ...
随机推荐
- Node.js + Express + Mongodb 开发搭建个人网站(一)
一.Node + Express环境搭建 0.去Node官网下载安装node,如果安装了 npm 和 node的话 那么就 安装 全局的 express,-g全局安装 npm install expr ...
- Activity Threa创建Window和View分析
http://blog.csdn.net/ljsbuct/article/details/7094580 1. 入口. 以前一直都说Activity的人口是onCreate方法.其实android上一 ...
- CI 笔记5 (CI3.0 默认控制器,多目录)
在ci3.x中,不支持多级子目录的默认控制器设置, 解决方法如下: 在index.php中,添加 $routing['directory'] = 'admin';然后在默认的router.php的默 ...
- TIFF6 Packbit algorithm
“Packbits” from ISO 12369 参考TIFF 6.0 Specification,点击TIFF, Version 6.0: @Section 9: PackBits Compres ...
- Oracle IN 传递字符串参数查询失效
在写存储过程中有如下代码: FOR a IN ( SELECT a.svo_no,a.AUDIT_NO,a.order_id FROM TT_PI_MODEL_REL a ) LOOP SELECT ...
- 13号中断 int 13(转)
第一部分 简 介 1,1 一. 硬盘结构简介 1. 硬盘参数释疑 到目前为止, 人们常说的 ...
- 装了SVN,你的关联图标变了没有?
装了SVN,你的关联图标变了没有? 开始合作之后,装上了SVN,非常高效,我在VS写了一部分的代码,上传之后,别人通过下载或是更新,就更新到了合作同伴的VS里,相当于大家在一个VS里写代码.和保强他们 ...
- PHPMailer发匿名邮件及Extension missing: openssl的解决
原文链接:http://www.tongfu.info/phpmailer%E5%8F%91%E5%8C%BF%E5%90%8D%E9%82 %AE%E4%BB%B6%E5%8F%8Aextensio ...
- mysql数据类型——字符串char(m)和varchar(m)
char(m) 定长字符串类型 非 Unicode 字符 varchar(m) 变长字符串类型 非 Unicode 数据 说明:M为最大可存储字节数 汉子占两个字节,通过指定m,来限制存储的最大字 ...
- MySql数据库3【优化1】表的优化
一.表结构的优化 1.标准化 标准化是在数据库中组织数据的过程.其中包括,根据设计规则创建表并在这些表间建立关系:通过取消冗余度与不一致相关性,该设计规则可以同时保护数据并提高数据的灵活性.通常数据 ...