InfoBoard.java
上传用户:jennyfly
上传日期:2021-08-10
资源大小:735k
文件大小:2k
- package view;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import javax.swing.JPanel;
- /**
- * InfoBoard产生一个滚动循环的字幕介绍程序的相关情况,它继承JPanel并实现了Runnable
- * 接口
- * @author 何晓飞
- * @version 2.0
- */
- public class InfoBoard extends JPanel implements Runnable{
- private static final long serialVersionUID = 1L;
- // 背景
- private BufferedImage back;
- // 控制字幕的线程
- private Thread autoScroll;
- //控制字幕位置的y偏移量
- private int offsetY;
- // 字幕
- private String[] captions;
- public InfoBoard() {
- // 获取图片
- back=ImageLoader.getInfoBack();
- // 内容
- captions= new String[] { " 连连看 2.0", "", "",
- "本游戏采用java语言编写,采用mvc模式设计",
- "",
- "玩家通过消去所有图片达到通关的目的",
- "",
- "游戏提供了:提示,演示,暂停,保存",
- "",
- "等诸多基本功能。",
- "",
- "此外程序提供了选择图片和音乐的功能",
- "",
- "玩家可以通过更换元素以提高游戏的娱乐性",
- "",
- "游戏共设十关",
- "",
- "程序提供了大部分可供扩展的接口",
- "",
- "有兴趣者可以很方便的扩展关数和功能",
- "",
- "如有问题,请mail到kevin1987725@163.com",
- "",
- "作者:西北工业大学 软件与微电子学院",
- "",
- "何晓飞 2008.12"};
- this.offsetY = captions.length * 20 - 80;
- // 判断线程是否运行
- if (this.autoScroll == null) {
- this.autoScroll = new Thread(this);
- this.autoScroll.start();
- }
- }
- // paintCoponent函数将组件画出
- public void paintComponent(Graphics g) {
- Graphics2D comp = (Graphics2D) g;
- // 设置颜色
- comp.setColor(Color.white);
- // 画矩形
- comp.fillRect(0, 0, this.getWidth(), this.getHeight());
- // 画图片
- comp.drawImage(back, 0, 0, this.getWidth(), this.getHeight(), this);
- // 设置字体
- comp.setFont(new Font("华文楷体", Font.PLAIN, 18));
- // 重绘
- comp.setColor(new Color(85, 26, 139));
- for (int i = 0; i < captions.length; i++) {
- comp.drawString(captions[i], 20, offsetY + i * 20);
- }
- }
- /**
- * 线程每隔0.1秒刷新一次字幕,同时每条字幕的位置移动一个像素,
- * 如果所有字幕已经显示完则重置Y偏移量
- */
- public void run() {
- try {
- while (true) {
- Thread.sleep(100);
- if (--offsetY < -captions.length * 20)
- offsetY = this.getHeight() + 20;
- repaint();
- }
- } catch (InterruptedException ignore) {
- }
- }
- }