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

简介: 直接上代码了。 微调按钮加画布画几个圆,再实现监听。。。package cn.hncu.threadDemo.thread2;import java.awt.Canvas;import 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;
        }

    }




}

目录
相关文章
|
存储 弹性计算 自然语言处理
PB级数据量背后阿里云 Elasticsearch 的内核优化实践
本文将揭秘阿里云在面对 PB 级数据量挑战下所做的内核优化实践。
6321 0
PB级数据量背后阿里云 Elasticsearch 的内核优化实践
|
9月前
|
机器学习/深度学习 PyTorch 测试技术
TurboAttention:基于多项式近似和渐进式量化的高效注意力机制优化方案,降低LLM计算成本70%
**TurboAttention**提出了一种全新的LLM信息处理方法。该方法通过一系列优化手段替代了传统的二次复杂度注意力机制,包括稀疏多项式软最大值近似和高效量化技术。
295 5
TurboAttention:基于多项式近似和渐进式量化的高效注意力机制优化方案,降低LLM计算成本70%
|
10月前
|
编译器 API 语音技术
SDK介绍
【10月更文挑战第21天】
|
存储 分布式计算 安全
MaxCompute Bloomfilter index 在蚂蚁安全溯源场景大规模点查询的最佳实践
MaxCompute 在11月最新版本中全新上线了 Bloomfilter index 能力,针对大规模数据点查场景,支持更细粒度的数据裁剪,减少查询过程中不必要的数据扫描,从而提高整体的查询效率和性能。
|
9月前
|
人工智能 缓存 算法
《Java 优化秘籍:计算密集型 AI 任务加速指南》
在AI蓬勃发展的今天,计算密集型任务对Java代码优化提出了更高要求。本文探讨了针对此类任务的优化策略,涵盖内存管理、CPU性能挖掘、算法与数据结构选型、高效I/O处理及持续监测评估等方面,助力开发者提升程序性能,应对挑战,在AI浪潮中乘风破浪。
213 18
|
9月前
|
项目管理 数据库
设计团队如何避免‘项目脱轨’?这些管理工具必须了解一下
设计团队的创造力和高效项目管理同样重要。本文探讨了设计团队在需求变化、跨部门协作、文件管理等方面的常见挑战,并推荐了五款专为设计团队量身打造的高效项目管理工具:板栗看板、Figma、Notion、Trello 和 Asana。这些工具在任务分配、进度跟踪、协作和版本管理等方面各具特色,帮助设计团队提升工作效率,实现项目顺利交付。
176 5
|
10月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
259 4
|
监控 安全 物联网
5G技术的革命性进步及其对社会的影响
5G技术作为移动通信领域的革命性进步,正深刻地影响着我们的生活和社会。它不仅提供了更快的数据传输速率和更低的延迟,还将引领着各个领域的创新和发展。从移动通信、工业、医疗到智能城市,5G技术正在改变着我们的世界,为未来带来更多可能性。然而,我们也需要解决一些挑战,确保5G技术的安全和可持续发展。随着技术的不断进步,5G技术的前景依然充满希望,将为我们的社会带来更多的创新和变革。
1353 1
5G技术的革命性进步及其对社会的影响
|
Java 数据安全/隐私保护 iOS开发
Windows 平台上也可以进行 iOS App 的开发
为了将 iOS APP 上架至 App Store,我们需要准备以下基本需求资料:1. 苹果开发者账号(如果还没有账号,需要先申请,可以参考苹果开发者账号申请教程)
An工具介绍之摄像头
An工具介绍之摄像头
565 0
An工具介绍之摄像头