我在SO上找到了这个答案并对此感到困惑。
我们有一个问题想要知道如何在ActionListener中处理JDialog。
try this way:
exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitActionPerformed(evt);
}
});
and then
private void exitActionPerformed(java.awt.event.ActionEvent evt) {
this.dispose();
}
这是回答者发布的代码(here's问题的链接)
以下是我在自己的代码中所做的事情:
buttonCancel.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
但我真的很关心上面的答案。我做错了什么,或者如果这样做的话,它没有改变任何东西?如果它没有影响,你会知道为什么这个人使用中间方法回答了吗?
谢谢
答案 0 :(得分:5)
我认为您的 MyDialog
class
包含extends
JDialog
请考虑以下代码。
exit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
exitActionPerformed(evt);
}
});
您已创建了java.awt.event.ActionListener
的匿名内部类。如果您在匿名内部类中使用this
关键字,则允许自行访问它,但不能像您预期的那样访问MyDialog
class
。因此this.dispose()
方法不可用。但您可以 MyDialog.this.dispose();
看看你的第二个例子
buttonCancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dispose();
}
});
当然,ActionListener
也是一个匿名内部类。但它允许访问包含类的方法。因此,可以在此处使用dispose()
方法。
答案 1 :(得分:3)
两者都有相同的效果。
该中间方法可能会用于在处置之前执行某些操作。这种类型的操作也可以使用您的版本完成,但使用中间方法可能会更具可读性。