如何等待鼠标单击

时间:2012-10-01 03:04:17

标签: java swing actionlistener mouseclick-event

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行(“在鼠标点击后打印”)。现在这种情况立即发生,我无法等待鼠标点击。有办法吗?除了在UserButtonActionPerformed()函数中执行它。请告诉我。

4 个答案:

答案 0 :(得分: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)并处理事件......

答案 1 :(得分:2)

很难从措辞中分辨出来,但我认为他或她只是想在按钮被触发后执行代码(实际上并不是等待)。为此,您需要在actionlistener中调用的方法中添加代码(在本例中为UserButtonActionPerformed)。

所以:

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

 System.out.println(...);

}

此外,遵循Java编码惯例将有助于人们在将来回答您的问题。

答案 2 :(得分:1)

事件在另一个线程event dispatching thread上管理,它们不是由执行代码的线程管理的(可能是主线程)。

这意味着你可以将监听器附加到GUI元素,但是你可以做的只是“等待”点击是在actionPerformed回调中执行代码。

没有办法暂停执行,因为addActionListener没有做任何事情来有效地捕获事件,它只是添加了监听器。从理论上讲,你可以锁定主线程等待事件调度通知,但这只是糟糕的设计。

答案 3 :(得分:1)

您可以随时在UserButtonActionPerformed中等待,方法是在同一个类中定义它。如果是这种情况,那么你应该没有遇到的问题