Java实现小球移动
Java实现小球移动
要求
- 使用Java类 JFrame,JPanel及其事件监听机制实现小球的移动
类介绍
1. JFrame类
-
JFrame类可以简单理解一个画框,可以向画框中添加各种组件,如面板panel等
-
构造器
JFrame() {} //构造一个最初不可见的新框架。 JFrame(GraphicsConfiguration gc) {} //在屏幕设备的指定 GraphicsConfiguration中创建一个 Frame和一个空白标题。 JFrame(String title) {} //创建一个新的,最初不可见的 Frame与指定的标题。 JFrame(String title, GraphicsConfiguration gc) {} //创建 JFrame具有指定标题和指定 GraphicsConfiguration屏幕设备的。
-
常用方法
add(); //向画框中添加组件 setSize(400, 300); //设置窗口大小 //窗口JFrame设置监听事件,即可以监听面板触发的事件 addKeyListener(); //设置关闭面板的方式 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置面板可视化 setVisible(true);
2. JPanel类
-
JPanel是一个通用的轻量级容器,可以简单理解为画纸,所有东西全部画在面板上,然后添加到Frame
-
构造器
JPanel() {} //创建一个新的 JPanel双缓冲区和流布局。 JPanel(boolean isDoubleBuffered) {} //创建一个新的 JPanel与 FlowLayout和指定的缓冲策略。 JPanel(LayoutManager layout) {} //使用指定的布局管理器创建一个新的缓冲JPanel JPanel(LayoutManager layout, boolean isDoubleBuffered) {} //使用指定的布局管理器和缓冲策略创建一个新的JPanel。
-
常用方法
paint(){} //使用画笔画
3. Graphics类
-
Graphics类是所有图形上下文的抽象基类,允许应用程序绘制在各种设备上实现的组件,以及屏幕上的图像。
-
该类的实例化对象即为一支画笔,可以使用此画笔画出各种图像
//画圆形 g.drawOval(10, 10, 100, 100); //画直线 g.drawLine(10, 10, 100, 100); //画矩形边框 g.drawRect(10,10,100,100); //画椭圆边框 g.drawOval(10, 10, 100,200); //填充矩形 g.fillRect(10,10,100,100); // 设置画笔的颜色 g.setColor(Color.blue); //画图片 // Image image = Toolkit.getDefaultToolkit().getImage(Panel.class.getResource("")); // g.drawImage(image, 10,10,175,221, this); g.setColor(Color.red); g.setFont(new Font("隶书",Font.BOLD,50)); g.drawString("北京你好",100,100);
4. Coler类
- Color类用于将颜色封装在默认的sRGB颜色空间中或由ColorSpace标识的任意颜色空间中的颜色 。
- 每个颜色的隐含alpha值为1.0或构造函数中提供的一个显式的Alpha值。
- alpha值定义了颜色的透明度,可以用范围0.0-1.0或0-255的浮点数来表示。
- alpha值为1.0或255表示颜色完全不透明,alpha值为0或0.0意味着颜色是完全透明的。
- 当构造一个
Color
具有显式α或得到一个的颜色/ alpha分量Color
,颜色分量决不会被预乘alpha分量。 - 其中包含大量静态属性,即颜色
5. KeyListener
-
用于接收键盘事件(按键)的侦听器界面。
-
使用该组件的
addKeyListener
方法将从该类创建的侦听器对象注册到组件。 按键,释放或键入时会产生键盘事件。 -
然后调用侦听器对象中的相关方法,并将
KeyEvent
传递给它。 -
常用方法
@Override public void keyTyped(KeyEvent e) { //有字符输出时,该方法就会触发 } @Override public void keyPressed(KeyEvent e) { //当某个健按下,该方法就会触发 } @Override public void keyReleased(KeyEvent e) { //当某个健释放,该方法就会触发 }
6. KeyEvent
- 当按下,释放或键入键时,此低级别事件由组件对象(例如文本字段)生成。
- 该事件传递给每个
KeyListener
或KeyAdapter
对象,该对象使用组件的addKeyListener
方法注册接收此类事件。
思路分析
- 首先使用JFrame类和Jpanel类画出小球
- 使用事件监听机制控制小球移动
- 重新绘制小球,重新绘制会值得原先的小球消失
源码及分析
package net.basic_grammat_review.tankgame;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
/**
* @Author BH Tian
* @Date 2022/1/8 12:52
* @Version 1.0
* 演示小球通过键盘控制上下左右的移动 (Java的时间控制)
*/
public class BallMove extends JFrame {
private MyPanel3 mp = null;
public static void main(String[] args) {
new BallMove();
}
public BallMove() {
mp = new MyPanel3();
this.add(mp);
this.setSize(400, 300);
//窗口JFrame设置监听事件,即可以监听面板范数的事件
this.addKeyListener(mp);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
}
class MyPanel3 extends JPanel implements KeyListener {
//为了让小球可以移动,把小球的左上角坐标(x,y)设置为变量
int x = 10;
int y = 10;
//小球移动速度
int speed = 5;
@Override
public void paint(Graphics g) {
super.paint(g);
g.fillOval(x, y, 20, 20);
}
@Override
public void keyTyped(KeyEvent e) {
//有字符输出时,该方法就会触发
}
@Override
public void keyPressed(KeyEvent e) {
//当某个健按下,该方法就会触发
//在Java中,会给每个键分配一个值(int)
if (e.getKeyCode() == KeyEvent.VK_DOWN) {
y += speed;
} else if (e.getKeyCode() == KeyEvent.VK_UP) {
y -= speed;
} else if (e.getKeyCode() == KeyEvent.VK_LEFT) {
x -= speed;
} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
x += speed;
}
//按键触发后重新绘制小球
this.repaint();
}
@Override
public void keyReleased(KeyEvent e) {
//当某个健释放,该方法就会触发
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)