Вызов этого из вложенного Java ActionListener
Предположим, у меня есть это:
class external {
JFrame myFrame;
...
class internal implements ActionListener {
public void actionPerformed(ActionEvent e) {
...
myFrame.setContentPane(this.createContentPane());
}
}
...
}
createContentPane
возвращает Контейнер. Теперь, если бы я делал этот код вне программы, ActionListener
он работал бы, потому что у меня был бы к нему доступ. Но внутри я этого не делаю. У меня есть доступ myFrame
, который будет обновлен с учетом содержимого метода, но этого недостаточно для того, чтобы делать то, что я хочу, если только я не смогу получить это из этого.
Мне также нужна информация из других переменных экземпляра createContentPane()
, поэтому я не уверен, что смогу это сделать static
.
Ответов (4)4
Вы также можете :
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());
}
}
...
}
Не совсем уверен, к чему вы клоните, но у внутреннего класса есть доступ ко всем членам его включающего класса. Для доступа к указателю «this» включающего класса (например, для перехода к другим методам) используйте:
someMethod(External.this);
В вашем примере вы фактически усложняете его, используя «это». Вот два варианта, которые подойдут:
myFrame.setContentPane(createContentPane());
или:
myFrame.setContentPane(External.this.createContentPane());
Обратите внимание, что вы уже получаете доступ к myFrame таким же образом.