MouseListener多次打印消息

时间:2019-07-01 19:06:09

标签: java graphics2d mouselistener

因此,我试图使用Java图形创建视频游戏,并且需要在菜单屏幕上的“播放”按钮上使用MouseListener。当我按下按钮时,只要我按住按钮,它就会重复打印测试文本。我认为这就像编写只允许打印一次但不知道如何执行的代码一样容易。

我尝试添加一个return方法,但是没有运气。 我也尝试将MouseListener语句移至mouseClicked,mouseEntered,mouseExited和mouseReleased,但没有运气 过去我确实有过类似的问题,只是用其他窗口代替了打印语句。

这是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 个答案:

答案 0 :(得分:0)

我将按以下方式解决它:

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对他们的评论的意思。