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()函数中执行它。请告诉我。
答案 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中等待,方法是在同一个类中定义它。如果是这种情况,那么你应该没有遇到的问题