[英]Calling this from inside a nested Java ActionListener
假設我有這個:
class external {
JFrame myFrame;
...
class internal implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
myFrame.setContentPane(this.createContentPane());
}
}
...
}
createContentPane
返回一個容器。 現在,如果我在ActionListener
之外執行此代碼,它會起作用,因為我可以訪問它。 但是,在里面,我沒有。 我可以訪問myFrame
,這將使用方法的內容進行更新,但這還不足以做我想做的事,除非我能從中得到這個。
我還需要來自其他實例變量的信息才能使用createContentPane()
,所以我不確定我是否可以使它成為static
。
您可以:
myFrame.setContentPane(createContentPane());
或者
myFrame.setContentPane(external.this.createContentPane());
順便說一句,在 Java 類中,第一個字母通常是大寫的。 如果您不這樣命名,您的代碼仍然可以編譯和運行,但是通過遵循編碼約定,您將能夠閱讀其他代碼,更重要的是其他人將能夠閱讀您的代碼。
所以這將是一個更好的風格:
class External {
JFrame myFrame;
...
class Internal implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
myFrame.setContentPane(createContentPane());
//Or myFrame.setContentPane(External.this.createContentPane());
}
}
...
}
external.this
將使您能夠訪問封閉 class 的實例,如果這是您想要的...
不確定您到底在做什么,但內部 class 可以訪問其封閉 class 的所有成員。 要訪問封閉 class 的“this”指針(例如,傳遞給其他方法),請使用:
someMethod(External.this);
在您的示例中,您實際上是通過使用“this”使其復雜化。 以下是兩個可行的選項:
myFrame.setContentPane(createContentPane());
或者:
myFrame.setContentPane(External.this.createContentPane());
請注意,您已經在以相同的方式訪問 myFrame。
首先,您必須像這樣在外部 class 中擴展 JFrame
class External extends JFrame {
.....
.....
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.