Java實(shí)力彈彈球?qū)崿F(xiàn)代碼
先看看效果圖:

直接上代碼了。
微調(diào)按鈕加畫布畫幾個(gè)圓,再實(shí)現(xiàn)監(jiān)聽(tīng)。。。
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);//默認(rèn)是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]);
}
//讓當(dāng)前畫布監(jiān)聽(tīng) 焦點(diǎn)事件
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);
//讓每個(gè)球的坐標(biāo)變化一下---(x坐標(biāo))
balls[i].x = balls[i].left ? balls[i].x-10:balls[i].x+10;
//當(dāng)球碰壁時(shí),更改球的方向
if(balls[i].x<=0||balls[i].x>=this.getWidth()-24){
balls[i].left = !balls[i].left;//切換方向
}
//讓每個(gè)球的坐標(biāo)變化一下---(y坐標(biāo))
balls[i].y = balls[i].up ? balls[i].y-10:balls[i].y+10;
//當(dāng)球碰壁時(shí),更改球的方向
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();//刷新畫布.調(diào)用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;
}
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Hbase、elasticsearch整合中jar包沖突的問(wèn)題解決
本篇文章主要介紹了Hbase、elasticsearch整合中jar包沖突的問(wèn)題解決,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12
淺談spring boot使用thymeleaf版本的問(wèn)題
這篇文章主要介紹了spring boot使用thymeleaf版本的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
SpringBoot集成ShardingSphere實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表
ShardingSphere?是一個(gè)開(kāi)源的分布式數(shù)據(jù)庫(kù)中間件,旨在為應(yīng)用提供數(shù)據(jù)庫(kù)分片、讀寫分離、分布式事務(wù)等功能,下面我們來(lái)看看SpringBoot如何集成ShardingSphere實(shí)現(xiàn)數(shù)據(jù)庫(kù)分表吧2024-12-12
java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼)
這篇文章主要介紹了java實(shí)現(xiàn)貪吃蛇游戲代碼(附完整源碼),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-01-01
Java實(shí)現(xiàn)圖書管理系統(tǒng)的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用java語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
List集合按某個(gè)屬性或者字段進(jìn)行分組的操作
這篇文章主要介紹了List集合按某個(gè)屬性或者字段進(jìn)行分組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06

