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 ...
随机推荐
- bootstrap3学习1:响应式布局layout
在去年的这个时候写过关于bootstrap的相关文章(见:bootstrap2学习1:基本CSS样式),然后就搁置了,原因是因为当时对bootstrap的了解不深,并且当时v2版本对响应式设计的不是非 ...
- 知识点摸清 - - function()——JavaScript 函数名后什么时候加括号,什么时候不
加括号——调用函数 只要是要调用函数执行的,都必须加括号. 此时,function()实际上等于函数的返回值.(没有返回值也已经执行了函数体内的行为).就是说,只要加括号的,就代表将会执行函数体代码. ...
- My-sql #1045 - Access denied for user 'root'@'localhost' (using password: NO)
当你重装数据库后出现这个问题的时候,不要着急,首先你要去你的确定你的数据库已经成功的把服务开启了, 然后确定你的密码和账户,IP都确认的情况下, 去寻找config.inc.php 这个文件,根据配置 ...
- HTML5 文件域+FileReader 分段读取文件并上传(八)-WebSocket
一.同时上传多个文件处理 HTML: <div class="container"> <div class="panel panel-default&q ...
- You must not call setTag() on a view Glide is targeting
概述 在使用Glide加载图片时,如果出现"You must not call setTag() on a view Glide is targeting"的错误,八成是在使用Li ...
- google的西联汇款可以使用工行代收
- 请教如何实现UITextField值变化的实时监视
上网搜索以后发现基本的处理方法大概有三种1.KVO方式[textField addObserver:self forKeyPath:@"text" options:0 contex ...
- BFC块级格式化上下文简述
做过页面编写的各位应该对定位不陌生了,这个样式表中的重头戏,也是最难把控的元素之一,今天在这里我们要讲到的就是与浮动与清除浮动相关的定位元素,对于定位有很多种,有绝对定位,还有相对定位,固定定位,静态 ...
- ZOJ 刷题记录 小黑屋 (`・д・´)
P1006:模拟 然而我的同余方程能过样例然而就是WA⊙﹏⊙b [已查明:扩展欧几里得算法出了很隐蔽的问题] int exGcd(int x,int y,int& a,int& b) ...
- ios开发相关网站
1.苹果开发者中心(ios Dev Center):最权威的学习ios开发的地方,提供ios开发所能用到的所有内容(包含文档.指南以及实例代码). https://developer.apple.co ...