为了账号安全,请及时绑定邮箱和手机立即绑定

MouseListener 多次打印消息

MouseListener 多次打印消息

幕布斯6054654 2023-03-02 15:53:09
所以我正在尝试使用 Java 图形创建一个视频游戏,我需要将 MouseListener 用于菜单屏幕上的“播放”按钮。当我按下按钮时,只要我按住按钮,它就会重复打印测试文本。我认为这就像编写只允许打印一次的代码一样简单,但我不知道该怎么做。我试过添加一个返回方法,但我没有运气。我也曾尝试将 MouseListener 语句移动到 mouseClicked、mouseEntered、mouseExited 和 mouseReleased,但没有成功,我过去确实遇到过类似的问题,除了用打开其他窗口替换 print 语句。这是 MouseListener 语句public void mousePressed(MouseEvent e) {    if ((e.getButton() == 1)            && (e.getX() >= Playx1 && e.getX() <= Playx1 + Playw1 && e.getY() >= Playy1 && e            .getY() <= Playy1 + Playh1)) {        System.out.println("Test Text, Replace line with method later");    }}动画循环可能很重要,我不知道private Thread animationThread = new Thread(new Runnable() {    public void run() {        while (true) {            repaint();            try {Thread.sleep(10);} catch (Exception ex) {}        }    }});我希望当我按下按钮时只显示一次“测试文本,稍后用方法替换行”,但相反,只要我按下按钮,它就会一直显示它。
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

我会解决它如下:


AtomicBoolean buttonIsPressed = new AtomicBoolean( false );


public void mousePressed( MouseEvent e ) 

{

    if( ((e.getButton() == 1)

        && (e.getX() >= Playx1 && e.getX() <= Playx1 + Playw1 && e.getY() >= Playy1 && 

        e.getY() <= Playy1 + Playh1))

        && !buttonIsPressed.compareAndExchange( false, true ) ) 

    {

        System.out.println("Test Text, Replace line with method later");

    }

}


public void mouseReleased( MouseEvent e ) 

{

    if( e.getButton() == 1 ) 

    {

        buttonIsPressed.compareAndExchange( true, false );

    }

}

我认为这就是@inquizitive 在他们的评论中的意思。


查看完整回答
反对 回复 2023-03-02
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信