Java---实力弹弹球,弹弹弹

简介: 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;
        }
    }
}


image.png

目录
相关文章
|
Java
JAVA弹球小游戏
JAVA弹球小游戏
326 0
|
Java
Java模拟弹球效果
1 /* 2 * 不添加事件监听的话最大最小可以用,但关闭不可以 3 */ 4 import java.awt.Color; 5 import java.awt.Frame; 6 import java.
1026 0
|
Java
Java模拟弹球效果(监听键盘)
1 import java.awt.*; 2 import java.awt.event.*; 3 4 public class BallGame extends Frame { 5 6 Image sun = Toolkit.
870 0
|
2月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
193 1
|
2月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
215 1
|
3月前
|
数据采集 存储 弹性计算
高并发Java爬虫的瓶颈分析与动态线程优化方案
高并发Java爬虫的瓶颈分析与动态线程优化方案
Java 数据库 Spring
164 0
|
3月前
|
算法 Java
Java多线程编程:实现线程间数据共享机制
以上就是Java中几种主要处理多线程序列化资源以及协调各自独立运行但需相互配合以完成任务threads 的技术手段与策略。正确应用上述技术将大大增强你程序稳定性与效率同时也降低bug出现率因此深刻理解每项技术背后理论至关重要.
268 16
|
4月前
|
缓存 并行计算 安全
关于Java多线程详解
本文深入讲解Java多线程编程,涵盖基础概念、线程创建与管理、同步机制、并发工具类、线程池、线程安全集合、实战案例及常见问题解决方案,助你掌握高性能并发编程技巧,应对多线程开发中的挑战。