亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號