弹跳的小球java课程设计_实例学习:弹跳的小球

## 题目要求 ##

小球在面板上弹跳。使用两个按钮暂停和重新开始小球的运动,使用一个滚动条控制小球弹跳的速度。

## 主要步骤 ##

1)创建一个JPanel的子类,将它命名为Ball,用来显示小球的弹跳,

2)创建一个JPanel的子类,将它命名为BallControl包含一个小球,一个滚动条,两个控制按钮,

## Ball.java ##

import javax.swing.Timer;

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class Ball extends JPanel {

private int delay = 10;

// Create a timer with delay 1000 ms

private Timer timer = new Timer(delay, new TimerListener());

private int x = 0; private int y = 0; // Current ball position

private int radius = 5; // Ball radius

private int dx = 2; // Increment on ball's x-coordinate

private int dy = 2; // Increment on ball's y-coordinate

public Ball() {

timer.start();

}

private class TimerListener implements ActionListener {

public void actionPerformed(ActionEvent e) {

repaint();

}

}

protected void paintComponent(Graphics g) {

super.paintComponent(g);

g.setColor(Color.red);

// Check boundaries

if (x < 0 || x > getWidth())

dx *= -1;

if (y < 0 || y > getHeight())

dy *= -1;

// Adjust ball position

x += dx;

y += dy;

g.fillOval(x - radius, y - radius, radius * 2, radius * 2);

}

public void suspend() {

timer.stop(); // Suspend timer

}

public void resume() {

timer.start(); // Resume timer

}

public void setDelay(int delay) {

this.delay = delay;

timer.setDelay(delay);

}

}

## 解释 ##

Ball类拓展JPanel类来显示一个移动的小球,定时器监听器ActionListener 来监听ActionEvent事件,(TimerListener).语句private Timer timer =nerw Timer(delay,new TimerListener())的功能是穿件一个Timer对象,当构造一个Ball的实例时就会启动语句timer.start()的定时器,这个定时器以固定的频率触发ActionEvent事件。监听器在语句repant()做出相应重画小球,已得到小球运动的动画。球的中心坐标(X,Y)处,它在下一次显示时就会变为(x+dx,y+dy).suspend方法和resume方法可以用来停止和启动定时器。setDelay(int) 方法设置新的延时。

## BallControl.java ##

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

public class BallControl extends JPanel {

private Ball ball = new Ball();

private JButton jbtSuspend = new JButton("Suspend");

private JButton jbtResume = new JButton("Resume");

private JScrollBar jsbDelay = new JScrollBar();

public BallControl() {

// Group buttons in a panel

JPanel panel = new JPanel();

panel.add(jbtSuspend);

panel.add(jbtResume);

// Add ball and buttons to the panel

ball.setBorder(new javax.swing.border.LineBorder(Color.red));

jsbDelay.setOrientation(JScrollBar.HORIZONTAL);

ball.setDelay(jsbDelay.getMaximum());

setLayout(new BorderLayout());

add(jsbDelay, BorderLayout.NORTH);

add(ball, BorderLayout.CENTER);

add(panel, BorderLayout.SOUTH);

// Register listeners

jbtSuspend.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

ball.suspend();

}

});

jbtResume.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

ball.resume();

}

});

jsbDelay.addAdjustmentListener(new AdjustmentListener() {

public void adjustmentValueChanged(AdjustmentEvent e) {

ball.setDelay(jsbDelay.getMaximum() - e.getValue());

}

});

}

}

## 解释 ##

BallControl类拓展JPanel类,显示一个球,一个滚动条。当点击Suspend按钮时,就会调用Suspend()方法使球暂停运动,及执行语句ball.suspend();当点击Resume按钮时,就会调用resume()方法使球重新开始运动(ball.resume()).可以使用滚动条改变小球弹跳的速度。

## BounceBallApp.java ##

import java.awt.*;

import javax.swing.*;

public class BounceBallApp extends JApplet{

public BounceBallApp()

{

add(new BallControl());

}

}

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 输出50—100间的所有素数,其中判断一个数是否为素数用函数完成。 2. 设计一个学生成绩管理系统,能输入学生的学号、姓名和成绩等数据,能按成绩从高到低进行排序,并能将排序的结果输出。 提示: 设计一个学生类student,包含三个私有数据成员,即学号sno、姓名sname和成员score; 在学生类student中再设计三个方法 setdata、display和getscore,分别用于完成输入学生信息、输出学生信息、返回某个学生成绩的功能; 定义一个manage类,它有一个student类型的私有数据成员s[num],其中num表示学生人数; 在manage类中分别定义三个方法input、output、sort,分别用于完成输入、输出和排序功能。 3.一个电子产品商店里卖各种电子产品,以下是几种产品类信息。 产品Product 的属性信息包括: 产品号(number) 种类(category) 名称(name) 价格(price ) 计算机Computer除具有产品基本信息外,还可能具有下面的属性: 内存(memory) 处理器(processorName)   笔记本电脑Laptop 除具有产品基本信息外,还可能具有下面的属性: 厚度(thickness) 重量(weight) 根据以上信息,首先抽象出类Product,它派生出子类Computer,Computer又派生出它的子类Laptop,实现以上三个类的定义,定义相应的构造方法,声明一个测试类,生成类对象,并把打印结果显示在屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值