这是我在大二学Java时的学期实训课时做的,最后我把它加在作业里给老师提交了,最后实训成绩及格(现在想想也确实是过了)。
启动程序后会在桌面中心生成窗口,当鼠标尝试点击“不能”按钮时会重新在桌面上随机定位,每尝试一次会将记录值++,直到100次结束并自动退出,当尝试点击过一次不能按钮后,再点击“能过”按钮会闪出一张200ms的“呵”的表情包再转回。如果点击窗体右上角的关闭按钮会弹框提示不能关闭,点击弹框的确定或关闭按钮主程序窗口不会有任何反应(当时还想着点关闭就再创建一个新的窗体,幸亏没这么弄)。除了点击按钮退出以外还能通过资源管理器关闭。
使用JFrame,实现鼠标事件监听器,并重写鼠标移入JButton时触发的方法。将界面重新定位(宽高的随机范围是0到屏幕宽高减去程序界面宽高)。
结束时的闪出图片使用定时器,图片闪出200ms后切换。
百度网盘地址
提取码: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(); } } //今天是标题党