java 窗体中标签动_Java实现窗体爱心移动特效

在整个窗体上进行爱心移动并且不影响鼠标操作其他的软件

1.先创建窗体的外壳(就像门框)代码:

package com.jerry.classs;

import java.awt.Toolkit;

import javax.swing.JFrame;

import com.sun.awt.AWTUtilities;

/**

* Java中表示窗体的类:JFrame 步骤: 1.写一个类,继承JFrame 2.写一个构造方法,确定窗体的形状

*

* @author jerry

*

*/

public class GameFrame extends JFrame {

//获取系统当前分辨率的宽度

static int width = Toolkit.getDefaultToolkit().getScreenSize().width;

//获取系统当前分辨率的高度

static int height = Toolkit.getDefaultToolkit().getScreenSize().height;

/**

* 构造方法:类似于模具 给窗体定型

*/

public GameFrame() {

//设置标题

setTitle("爱心");

//设置尺寸(大小)

//setSize(宽度, 高度);

setSize(width, height);

//设置默认的关闭选项(每次制作窗体必须的加)

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//隐藏标题栏

setUndecorated(true);

//让特效一直显示在屏幕的顶端

setAlwaysOnTop(true);

//让窗体不遮盖桌面(程序运行时可以点击桌面的图标)

AWTUtilities.setWindowOpaque(this, false);//固定的套路

}

public static void main(String[] args) {

//创建窗体

GameFrame frame = new GameFrame();

//创建面板

GamePanel panel = new GamePanel();

//将面板加入窗体

frame.add(panel);

//让窗体显示

//true表示显示,false表示隐藏

frame.setVisible(true);

}

}

2.创建窗体的面板窗体的装饰(就像门)代码:

package com.jerry.classs;

import java.awt.Color;

import java.awt.Font;

import java.awt.Graphics;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.util.Random;

import javax.imageio.ImageIO;

import javax.swing.JPanel;

/***

* Java中的面板:Panel 步骤: 1.写一个类,继承JPanel 2.写一个构造方法,确定面板的特点

*

* @author jerry

*

*/

public class GamePanel extends JPanel {

private static final long serialVersionUID = 1L;

int num = 300;//代表屏幕中文字的数量

//定义数组,用来存放所有文字的横坐标

int[] xs = new int[num];

//定义数组,用来存放所有文字的纵坐标

int[] ys = new int[num];

//定义颜色数组,用来存放所有文字的颜色

Color[] cs = new Color[num];

//定义数组,用来存放所有文字的大小

int[] fs = new int[num];

//定义数组,用来存放所有文字的移动熟读

int[] sp = new int[num];

//用来生成随机数的工具

Random rd = new Random();

//定义图片

BufferedImage img;

/**

* 让文字活动

*/

public void action() {

//Java中创建并启动线程的固定格式

//创建并启动一个线程去播放音乐

new Thread() {

public void run() {

//重复播放音乐

while (true) {

//创建音乐播放器

MusicPlayer player = new MusicPlayer("/music/bgm.mp3");

//开始播放音乐

player.startMusic();

}

}

}.start();

//创建并启动线程,控制文字移动

new Thread() {

public void run() {

//while,死循环控制文字一直移动

while (true) {

//遍历所有的文字,让文字移动起来

for (int i = 0; i < num; i++) {

//让文字的向左移动

xs[i] -= sp[i];

//如果横坐标小于等于0,移动到左边界

if (xs[i] <= 0) {

//让文字的横坐标等于屏幕宽度(文字出现在最右边)

xs[i] = GameFrame.width;

}

}

//让线程休眠

try {

//每移动一次休眠的毫秒数

Thread.sleep(15);

//刷新界面,将文字画在新的位置上

repaint();//重新调用paint方法,绘制界面

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}.start();

}

/**

* 面板设置

*/

public GamePanel() {

//加载图片

try {

img = ImageIO.read(this.getClass().getResource("/img/img.png"));

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//启动文字移动

action();

//设置面板的背景颜色

//setBackground(Color.black);

//循环,随机出所有文字的横纵坐标

for (int i = 0; i < num; i++) {

//随机生成所有的横坐标,并放入横坐标的数组中

//rd.nextInt(num);表示在表示在[0,num)区间随机生成整数

xs[i] = rd.nextInt(GameFrame.width);

//随机生成所有的横坐标,并放入纵坐标的数组中

//rd.nextInt(num);表示在表示在[0,num)区间随机生成整数

ys[i] = rd.nextInt(GameFrame.height);

//随机颜色

cs[i] = new Color(rd.nextInt(255), rd.nextInt(255), rd.nextInt(255));

//随机字体大小

fs[i] = rd.nextInt(30) + 1;

//随机文字速度

sp[i] = rd.nextInt(10) + 1;

}

//让背景透明

setOpaque(false);

}

/**

* 画图专用方法

*/

@Override

public void paint(Graphics g) {

super.paint(g);

for (int i = 0; i < num; i++) {

//设置画笔颜色(从颜色数组中获取)

g.setColor(cs[i]);

//设置画笔字体

//new Font("字体名称",字体样式,字体大小)

g.setFont(new Font("华文新魏", Font.BOLD, fs[i]));

//画图片g.drawImage(图片, 横坐标,纵坐标, 宽度,高度,null);

g.drawImage(img, xs[i], ys[i], fs[i] * 2, fs[i] * 2, null);

//画文字g.drawString("文字内容",横坐标,纵坐标)

//g.drawString("★I LOVE YOU", xs[i], ys[i]);//可以图片和文字一起显示

}

}

}

3.创建音乐播放组件 代码:

package com.jerry.classs;

import java.io.BufferedInputStream;

import javazoom.jl.decoder.JavaLayerException;

import javazoom.jl.player.Player;

/**

* 播放音乐的

*

* @author jerry

*

*/

public class MusicPlayer {

//音乐的播放组件

Player player;

/**

* 设置音乐播放器

*/

public MusicPlayer(String path) {

//使用IO流将背景音乐加载到程序中

BufferedInputStream ins = new BufferedInputStream(this.getClass().getResourceAsStream(path));

//将音乐流输入到播放器组件中

try {

player = new Player(ins);

} catch (JavaLayerException e) {

e.printStackTrace();

}

}

/**

* 开始播放音乐

*/

public void startMusic() {

//播放音乐

try {

player.play();

} catch (JavaLayerException e) {

e.printStackTrace();

}

}

}

代码链接:https://pan.baidu.com/s/1L2-0puBQaEJ37Kyv-t24RQ

提取码:vsw1

标签:特效,Java,java,int,窗体,new,import,public

来源: https://blog.csdn.net/qq_46667057/article/details/106593789

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值