如何从处理程序中调用外部方法
因此,我有一个MouseListener类,它有一个公用类中的几个方法。 我已将mouseListener附加到公共类中的组件。如何从处理程序中调用外部方法
问题是我找不到一个简单的方法来调用公共类中的方法,每当我说例如this.showRemove();
范围是从处理程序类而不是公共类。以下是一些示例代码
public class Game {
public Game() {
JPanel pnl = new JPanel();
pnl.addMouseListener(new GameMouseListener());
}
public void showRemove(){
//Code Here
}
class GameMouseListener implements MouseListener {
public void mouseClicked(MouseEvent e) {
this.showRemove(); //Can't Find Symbol Here
}
}
}
当您在内部类中使用this
时,您指的是内部类的实例,而不是主机类。
因为你的内部类不是一个静态内部类,你可以使用它访问参考主机类的类名像这样:
HostClass {
doSomething() {}
class Inner {
void blah() {
HostClass.this.doSomething();
}
}
}
除非你调用的方法是也在内部类中,可以避免显式命名,并且可以简单地使用方法名称:
void blah() {
doSomething();
}
您需要对Game对象的引用才能调用该方法。当你说this.showRemoved()时,“this”引用MouseListener对象而不是Game对象。
一种可能性是让Game类扩展MouseListener,并将mouseClicked()方法放入Game类中。
由于showRemove
是一个非静态方法Game
您需要一个该类的实例来调用该方法。
您可以改为创建一个匿名内部类是这样的:
pnl.addMouseListener(new MouseAdapter() {
public void MouseClicked (MouseEvent e) {
showRemove();
}
});
此侦听器将与Game
正在运行的实例相关联,并因此将有机会获得它的非静态方法。
我试图做到这一点,我仍然无法访问非静态方法时,使用“this.showRemove”我仍然在一个类 –
好吧我想通了,问题是,我用这个和应该按照原样调用该方法。谢谢你的帮助! –
很高兴能有所帮助。这在Java中是非常常见的模式 - 通常情况下,您只需要在一个地方监听器类。 – eaj
由于Game类的性质,它不可能扩展MouseListener。有没有办法将对象发送给Handler,因为如果我要做e.getSource(),我会得到JPanel而不是Game Object。 –