[英]How to call an outer method from within a handler
因此,我在帶有一些方法的公共類中有一個MouseListener類。 我已經將mouseListener附加到公共類中的組件上。
問題是,無論何時說到this.showRemove();
我都找不到一種簡單的方法來調用公共類中的方法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();
}
由於showRemove
是Game
的非靜態方法,因此您需要該類的實例來調用該方法。
您可以改為創建一個匿名內部類,如下所示:
pnl.addMouseListener(new MouseAdapter() {
public void MouseClicked (MouseEvent e) {
showRemove();
}
});
該偵聽器將與Game
的運行實例相關聯,因此可以訪問其非靜態方法。
您需要對Game對象的引用才能調用該方法。 當您說this.showRemoved()時,“ this”是引用MouseListener對象而不是Game對象。
一種可能性是讓Game類擴展MouseListener,並將mouseClicked()方法放入Game類內。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.