我有一个JButton,我添加了一个actionPerformed,我试着写一个"这个"方法,它不会允许它。我怎样才能做到这一点?这是我想要做的例子:
public void methodName(String results) {
this.results = results;
}
Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
this.methodName(asdf);
}
答案 0 :(得分:3)
因为它是一个匿名类,所以使用this
将引用匿名类实例,而不是整个类。为了解决这个问题,请表示你想特别引用你的外部类:
Something some = new Something() {
public void overridden() {
YourClass.this.methodName("test");
}
};
答案 1 :(得分:0)
你的班级是匿名的,所以在匿名语境中,this
没有任何意义。你this
是什么意思?如果您的意思是按钮,则答案为event.getSource()
答案 2 :(得分:0)
在您的代码中,this
在您调用方法时会引用您的ActionListener
。
如果您想从封闭类中调用methodName()
,您有两种选择:
删除this
:
Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
methodName(asdf);
}
存储对封闭类的引用并使用它:
final MyClass enclosingClass = this;
Button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent event) {
enclosingClass.methodName(asdf);
}
答案 3 :(得分:0)
您不能在内部类中使用“this”关键字来访问外部类方法。如果我们使用它,那么它将引用内部类。而不仅仅是使用方法名称。参见示例。
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; public class TestButton { String results = ""; JButton Button = new JButton(); public TestButton(){ Button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { methodName("Test"); this.show(); } public void show(){ System.out.println("hi"); } }); } public void methodName(String results) { this.results = results; } }