打字游戏之主界面实现

   日期:2020-07-09     浏览:94    评论:0    
核心提示:效果展示:实现方法:1.窗口添加背景图窗口添加背景图实现方法2.打字游戏标题的自动下落标题的自动下落其实上也是打字游戏的精髓代码之所在,只要理解了如何实现标题下落,那么数字下落问题也可如法炮制。实现标题自动下落的本质实际上就是将标题画在一个画布上,然后擦掉标题,修改标题位置后再次重绘,只要反复重绘的速度够快,就形成了标题在自动下落的感觉。实现方法是新建一个JPanel的子类(为了实现重绘)并且实现runnable接口(等等为了新建一个线程,让标题下落和其他的任务可以并发执行)/*在一个

目录及源码链接https://blog.csdn.net/coolyuan/article/details/107169180

效果展示:



实现方法:

1.窗口添加背景图

窗口添加背景图实现方法

2.打字游戏标题的自动下落

标题的自动下落其实上也是打字游戏的精髓代码之所在,只要理解了如何实现标题下落,那么数字下落问题也可如法炮制。
实现标题自动下落的本质实际上就是将标题画在一个画布上,然后擦掉标题,修改标题位置后再次重绘,只要反复重绘的速度够快,就形成了标题在自动下落的感觉。
实现方法是新建一个JPanel的子类(为了实现重绘)并且实现runnable接口(等等为了新建一个线程,让标题下落和其他的任务可以并发执行)


class Title extends JPanel implements Runnable {
    int width = 500;
    int height = 250;
    int N = 4;
    int[] x = new int[N];//存储标题中的每个字的横坐标
    int[] y = new int[N];//存储标题中的每个字的纵坐标
    String[] strs = new String[]{"打", "字", "游", "戏"};

    Title() {

        setBounds(0, 0, width, height);//设置面板大小
        setOpaque(false);//透明
        setplace();//设置标题每个字初始的横纵坐标
    }

    void setplace() {
        for (int i = 0; i < N; i++) {
            x[i] = (int) (width * 0.15 + i * 0.2 * width);
            y[i] = 10;
        }
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.RED);//设置画笔颜色为红
        g.setFont(new Font("方正姚体", Font.PLAIN, 50));//设置画笔字体
        for (int i = 0; i < N; i++) {
            g.drawString(strs[i], x[i], y[i]);//在指定位置画出标题的字
            y[i]++;//标题的字纵坐标下移一像素
            if (y[i] > height - 50) {//如果到达height-50,则保持在那个位置
                y[i] = height - 50;
            }
        }

    }

    @Override
    public void run() {
        while (true) {
            try {
                Thread.sleep(10);//实现每10毫秒重绘一次
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            repaint();//调用重绘函数
        }
    }
}

然后再主窗口添加该标题面板,并启动线程

Title title = new Title();//新建一个标题对象
            this.add(title);//往窗口中加入标题面板
            Thread t = new Thread(title);//将标题面板加入一个线程
            t.start();//启动线程,实现标题面板下落

3.鼠标进入按钮范围内自动圈起

本人嫌弃JButton太丑,因此用JLabel代替,圈起的实现只需要给每个JLabel添加鼠标适配器,当鼠标
进入JLabel区域时,重写 mouseEntered方法,给JLabel添加边框,重写mouseExited方法,设置JLabel无边框,如:

 exitjb.addMouseListener(new MouseAdapter() {
                @Override
                public void mouseClicked(MouseEvent e) {
                    System.exit(0);
                }

                public void mouseEntered(MouseEvent e) {
                    exitjb.setBorder(BorderFactory.createMatteBorder(2, 2, 2, 2, Color.LIGHT_GRAY));
                }

                @Override
                public void mouseExited(MouseEvent e) {
                    exitjb.setBorder(null);
                }
            });


ps:被老师问过 MouseAdapter()这块东西是什么,当初以为能new的应该就是个普通的类,结果打脸了。
Ctrl+鼠标左键查看MouseAdapter,

知道了MouseAdapter是个抽象类,实现了MouseListener等接口,因此可以使用MouseAdapter的子类创建的对象做监视器,只需重写需要的接口方法即可。
new MouseAdapter()实际上就是new了一个继承了MouseAdapter抽象类的匿名内部类。

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服