【发布时间】:2014-11-08 15:26:16
【问题描述】:
有没有办法在 JFrame 中查看究竟触发了 WindowClosing 事件?目前getSource(),似乎只返回了JFrame:
public void windowClosing(WindowEvent e) {
JOptionPane.showMessageDialog(null, "event source: " + e.getSource(), "Test", JOptionPane.OK_OPTION);
methodA();
}
由于方法 dispose() 触发了 WindowClosing 事件,我想知道这一点。因此,如果单击调用 methodA() 然后调用 dispose() 的按钮,则 dispose() 会触发一个关闭事件,该事件也被定义为调用 methodA()。这会导致 methodA() 被调用两次,我不希望这样。
public void actionPerformed(ActionEvent e) {
if (e.getSource() == confirmButton) {
methodA();
dispose(); //this will trigger window closing and call methodA() again
}
}
所以我想解决问题的方法是检查一个名为“确认”的特定按钮是否是触发关闭事件的按钮。然后我不想调用 methodA() 以免它被调用两次。
如果这是不可能的,我至少可以检查框架中的关闭(X)按钮是否是调用窗口关闭事件的那个?
谢谢
【问题讨论】:
-
//this will trigger window closing and call methodA() again设置一个布尔标志alreadyDoneMethodA并在调用methodA之前检查它是否为假,然后在完成后将其设置为真。 -
@AndrewThompson 嗯,好吧,没想到。如果一切都失败了,我会尝试的。但是,有没有办法检查哪个按钮调用了该事件?
-
“有没有办法检查哪个按钮调用了事件?” 您可以创建一个堆栈跟踪并迭代跟踪的元素以查看代码行命中在到达那里之前。但这将是一个 hack.. “没想到这一点。如果一切都失败了,我会尝试。”您似乎想在按照可能的方式进行操作之前调查这些 hack在许多其他程序中完成。