Java捕获鼠标响应(求婚大作战~)

想起来高中的时候马菊花老师给我们用VB写的一个有意思的点不到NO的小游戏, 今天自己也写了一个玩一哈~
先上效果:

src="//player.bilibili.com/player.html?aid=35648611&cid=62521295&page=1" scrolling="no" width="800" height="600" border="0" allowfullscreen="true">

就是点不到No啦, 只能点Yes ?
点到Yes之后, 显示一些东西;
上代码先:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Random;

public class ActionFrame extends JFrame {
    JPanel myWindow;
    private static final int DEFAULT_WIDTH = 600;
    private static final int DEFAULT_HEIGHT = 600;
    public ActionFrame(){
        this.setTitle("求婚大作战");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.setSize(new Dimension(DEFAULT_WIDTH,DEFAULT_HEIGHT));
        myWindow = new JPanel();
        JLabel marry = new JLabel("Do you love me?");
        marry.setFont(new Font("DialogInput",Font.BOLD,30));
        JButton yes = new JButton("Yes");
        JButton no = new JButton("No");
        yes.setFont(new Font("DialogInput",Font.BOLD,18));
        no.setFont(new Font("DialogInput",Font.BOLD,18));
        yes.setLocation(100,100);
        no.setLocation(200,100);
        myWindow.add(marry);
        myWindow.add(yes);
        myWindow.add(no);
        no.addMouseMotionListener(new MouseMove(no));
        yes.addActionListener(e->{
            JLabel su = new JLabel("Best wish to you!");
            su.setFont(new Font("DialogInput",Font.BOLD,30));
            myWindow.setBackground(Color.PINK);
            myWindow.removeAll();
            myWindow.add(su);
            myWindow.validate();
        });
        this.add(myWindow);
    }
    public class MouseMove implements MouseMotionListener{
        JButton no;
        Random rnd = new Random();
        public MouseMove(JButton no){
            this.no = no;
        }
        @Override
        public void mouseDragged(MouseEvent e){}

        @Override
        public void mouseMoved(MouseEvent e) {
            no.setLocation(rnd.nextInt(480)+20,rnd.nextInt(480)+20);
        }
    }

    public static void main(String[] args) {
        new ActionFrame();
    }
}

原理也非常简单, 创建一个Label显示文字, 然后创建两个Button 分别是Yes和No
然后在Yes上加一个ActionListener在点击Yes的时候清空面板, 加上一个新的Label显示"Best wish to you";
然后给No加上一个MouseMove的内部类, 支持了MouseMotionListener接口, 然后实现mouseMoved和mouseDragged方法, 在MouseMove方法里面设置No这个Button的位置为一个固定范围内的随机值, 记得要在构造函数里把这个Button传进来; 因为一旦Move到这个Button上这个Button就会移动, 自然也就不存在Button的mouseDragged问题了~
最后记得点Yes之后要移除之前写的两个Button然后刷新界面, JFrame要刷新界面只能借助于JPanel, 可以用myWindow.validate();也可以用myWindow.updateUI();都可以刷新界面, 我尝试用repaint好像是不可以的QAQ

然后就搞定啦, 嘤嘤嘤~

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值