这是我在大二学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();
}
}
//今天是标题党