[英]How can I use JPopupMenu actionlistener inside a class constructor?
[英]Passing current class in constructor, inside actionlistener
所以我试图在actionlistner的构造函数中传递当前类
像这样的东西:
public ActionListener createTaskListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
CreateTask ct = new CreateTask();
CreateTaskController ctc = new CreateTaskController(ct, mod.getAssessments(), this);
// but it says anonymous actionlistener
ctc.loadDataToTaskView();
ct.setVisible(true);
}
};
}
解决此类问题的一般方法是什么? 还是这只是伪劣代码?
this
将指向动作侦听器的匿名实例。 如果要传递封闭类的this
指针,请使用<enclosingClassName>.this
。
例如:
class MyClass {
public ActionListener createTaskListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
...
CreateTaskController ctc =
new CreateTaskController(ct, mod.getAssessments(), MyClass.this); // <-
...
}
};
}
}
作为旁注。 ActionListener
是一个功能接口。 因此,您可以使用lambda表达式简化代码:
class MyClass {
public ActionListener createTaskListener() {
return ae -> {
CreateTask ct = new CreateTask();
CreateTaskController ctc =
new CreateTaskController(ct, mod.getAssessments(), MyClass.this);
ctc.loadDataToTaskView();
ct.setVisible(true);
};
}
}
内部类中的this
引用内部类实例。 要引用封闭的类实例,可以使用OuterclassName.this
。
例如
public ActionListener createTaskListener() {
return new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
CreateTask ct = new CreateTask();
CreateTaskController ctc = new CreateTaskController(ct, mod.getAssessments(), YourClassName.this);
// but it says anonymous actionlistener
ctc.loadDataToTaskView();
ct.setVisible(true);
}
};
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.