2
class GameFrameClass extends javax.swing.JFrame  {

    public void MyFunc()
    {
        UserButton.setText(Str);
        UserButton.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                UserButtonActionPerformed(evt);
            }
        });
        getContentPane().add(UserButton);
    }

    private void UserButtonActionPerformed(java.awt.event.ActionEvent evt) {

        //print some stuff after mouse click
    }
}

別のクラスで、この関数を定義します

void functionAdd()
{
    GameFrameClass gfc = new GameFrameClass()
    gfc.MyFunc()
    System.out.println("PRINT THIS AFTER MOUSE CLICK")  
}

誰かがこのコードを調べることができれば。マウスのクリックを待ちたい。マウスがクリックされた後に行 System.out.println("PRINT THIS AFTER MOUSE CLICK") を印刷する方法はありますか? 今のところ、これはすぐに発生し、マウスのクリックを待つことができません。それを行う方法はありますか?関数 UserButtonActionPerformed() 内でそれを行うこととは別に。私にお知らせください 。

4

4 に答える 4

3

これは本当に「悪い」方法です...

private void UserButtonActionPerformed(java.awt.event.ActionEvent evt) {
    addMouseListener(new MouseAdapter() {
        public void mouseClicked(MouseEvent evt) {
            System.out.println("PRINT THIS AFTER MOUSE CLICK");
            removeMouseListener(this);
        }
    });
}

より良い方法はactionPerformed、マウス リスナー (以前に追加したもの) を "有効にする" フラグをメソッドに含めることです。このリスナーは、クリックごとにフラグをチェックし、フラグが設定されてtrueいる場合は、フラグを反転させ (にfalse)、イベントを処理します...

于 2012-10-01T03:09:42.247 に答える
2

言葉遣いから判断するのは難しいですが、ボタンがトリガーされた後にコードを実行したいだけだと思います (実際には待つ必要はありません)。そのためには、actionlistener 内で呼び出されるメソッド内にコードを追加する必要があります (この場合はUserButtonActionPerformed)。

そう:

private void UserButtonActionPerformed(java.awt.event.ActionEvent evt) {

 System.out.println(...);

}

また、Java コーディング規約に従うことは、将来、人々があなたの質問に答えるのに役立ちます。

于 2012-10-01T03:11:26.737 に答える
1

イベントは、イベント ディスパッチ スレッドである別のスレッドで管理されます。コードを実行しているスレッド (おそらくメイン スレッド) では管理されません。

これは、リスナーを GUI 要素にアタッチできることを意味しますが、クリックを「待機」するためにできることは、actionPerformedコールバック内でコードを実行することだけです。

addActionListenerはイベントを効果的にキャッチするために何もせず、リスナーを追加するだけなので、実行を一時停止する方法はありません。理論的には、イベント ディスパッチ 1 によって通知されるのを待ってメイン スレッドをロックできますが、それは悪い設計です。

于 2012-10-01T03:08:09.233 に答える
1

同じクラスで定義することで、UserButtonActionPerformed でいつでも待機できます。その場合、直面している問題は発生しないはずです

于 2012-10-03T08:14:45.163 に答える