因为这个程序,大学时我差点挂科

      这是我在大二学Java时的学期实训课时做的,最后我把它加在作业里给老师提交了,最后实训成绩及格(现在想想也确实是过了)。

运行流程:

      启动程序后会在桌面中心生成窗口,当鼠标尝试点击“不能”按钮时会重新在桌面上随机定位,每尝试一次会将记录值++,直到100次结束并自动退出,当尝试点击过一次不能按钮后,再点击“能过”按钮会闪出一张200ms的“呵”的表情包再转回。如果点击窗体右上角的关闭按钮会弹框提示不能关闭,点击弹框的确定或关闭按钮主程序窗口不会有任何反应(当时还想着点关闭就再创建一个新的窗体,幸亏没这么弄)。除了点击按钮退出以外还能通过资源管理器关闭。

效果如图:

因为这个程序,大学时我差点挂科

大致思路:

​       使用JFrame,实现鼠标事件监听器,并重写鼠标移入JButton时触发的方法。将界面重新定位(宽高的随机范围是0到屏幕宽高减去程序界面宽高)。

​       结束时的闪出图片使用定时器,图片闪出200ms后切换。

包含的10张图片及源码:

百度网盘地址
提取码:2ca8

Java代码:

import java.awt.event.*;

import javax.swing.*;

import java.awt.*;

import java.util.Objects;
import java.util.Timer;

public class Joke extends JFrame implements MouseListener {
    /**
     * 标志位,标志1为默认,即未点击按钮2,从而进入鼠标进入按钮1所触发的分支
     * 当点击按钮2后会设置标志位为2
     */
    int flag = 1;

    JLabel jL1, jL2;
    JButton jB1, jB2;

    //获取当前系统屏幕分辨率
    int x = Toolkit.getDefaultToolkit().getScreenSize().width;
    int y = Toolkit.getDefaultToolkit().getScreenSize().height;

    int n = 0;              //尝试点击按钮的次数
    static Joke o;

    public Joke() {
        super("It's just a joke >_<");

        jL1 = new JLabel("您就说我这Java能不能过吧");
        jL1.setBounds(90, 15, 300, 100);

        jL2 = new JLabel();
        jL2.setBounds(100, 80, 300, 100);//300,100
        jL2.setIcon(new ImageIcon(Objects
                .requireNonNull(getClass().getResource("hiahia.jpg"))));

        jB1 = new JButton("不能");
        jB1.setBounds(80, 190, 70, 30);
        jB1.addMouseListener(this);

        jB2 = new JButton("能过");
        jB2.setBounds(220, 190, 70, 30);
        jB2.addMouseListener(this);

        this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                JOptionPane.showMessageDialog(o, "抱歉,关不了", "Tips",
                        JOptionPane.QUESTION_MESSAGE);
            }
        });

        Container winContainer = this.getContentPane();
        winContainer.add(jL1);
        winContainer.add(jL2);
        winContainer.add(jB1);
        winContainer.add(jB2);
        winContainer.setLayout(null);

        this.setVisible(true);
        this.setResizable(false);
        this.setSize(400, 300);
        this.setLocationRelativeTo(null);//首次启动处于桌面中心
    }

    public void mouseClicked(MouseEvent m) {
        //鼠标点击
    }

    public void mouseEntered(MouseEvent m) {
        //鼠标划入
        if (m.getSource() == jB1 && flag == 1 && n != 100) {//检查标志位和按钮
            n++;
            jL1.setText(n + " 次了,我帮你记着呢!");
            int a = (int) (Math.random() * (x - 400 + 1));//让窗体始终保持在桌面以内
            int b = (int) (Math.random() * (y - 300 + 1));
            this.setLocation(a, b);
            switch (n) {
                case 1:
                    jL1.setText("你竟然想点“不要”");
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("tm.jpg"))));
                    break;
                case 2:
                    jL1.setText("还想点??");
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("yi.jpg"))));
                    break;
                case 3:
                    jL1.setText("你点100次“不要”还是点一次“好的”");//
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("what.png"))));
                    break;
                case 4:
                case 56:            //50次时加5,下次触发时n还是会再次自加即56次
                    jL2.setIcon(null);//将标签2图片置为空
                    break;
                case 50:
                    jL1.setText("看你点这么多次也不容易,给你加个buff!次数+5");
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("buff.png"))));
                    n = n + 5;
                    break;
                case 98:
                    jL1.setText("还有机会,想好喽。");
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("dog.jpg"))));
                    break;
                case 99:
                    jL1.setText("这么毒??");
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("backface.png"))));
                    break;
                case 100:
                    jL1.setText("厉害,惹不起,在下学业繁忙,告辞!");
                    jL2.setIcon(new ImageIcon(Objects
                            .requireNonNull(getClass().getResource("bye.jpg"))));
                    jB1.setText("告辞");
                    jB2.setText("告辞");
                    Timer timer = new Timer();
                    timer.schedule(new TaskKill(), 2000);
                    break;
                default:
                    break;
            }
        }
    }

    public void mouseExited(MouseEvent m) {
        //鼠标划出
    }

    public void mousePressed(MouseEvent m) {
        //鼠标按下
    }

    public void mouseReleased(MouseEvent m) {
        //鼠标释放
        if (m.getSource() == jB2 && flag != 2 && n != 100) {//检查标志位不为2
            //flower

            if (n > 0) {//你看不到的。。。尝试点击"不要"按钮一次以上,再点击"好的"按钮会闪出
                jL1.setText("呵");
                jL2.setIcon(new ImageIcon(Objects
                        .requireNonNull(getClass().getResource("he.png"))));
                jB1.setText("呵呵");
                jB2.setText("呵呵");
                Timer timer = new Timer();
                timer.schedule(new change(), 100);
                flag = 2;//同样设标志位为2
                return;
            }
            jL1.setText("开心");
            jL2.setIcon(new ImageIcon(Objects
                    .requireNonNull(getClass().getResource("flower.png"))));
            jB1.setText("好哒");
            jB2.setText("好哒");
            flag = 2;
        } else if ((m.getSource() == jB1 || m.getSource() == jB2) && flag == 2 && n != 100) {
            System.exit(0);
        } else if ((m.getSource() == jB1 || m.getSource() == jB2) && n == 100) {//n=100后
            System.exit(0);
        }
    }

    class change extends java.util.TimerTask {
        public void run() {
            jL1.setText("开心");
            jL2.setIcon(new ImageIcon(Objects
                    .requireNonNull(getClass().getResource("flower.png"))));
            jB1.setText("好哒");
            jB2.setText("好哒");
        }
    }

    static class TaskKill extends java.util.TimerTask {
        public void run() {
            System.exit(0);
        }
    }

    public static void main(String[] args) {
        new Joke();
    }
}
//今天是标题党

上一篇:设计模式学习-使用go实现单例模式


下一篇:python – 在QTreeWidget中调用上下文菜单