Вопрос

Предположим, у меня есть это:

class external {
    JFrame myFrame;
    ...

    class internal implements ActionListener {
        public void actionPerformed(ActionEvent e) {
             ...
             myFrame.setContentPane(this.createContentPane());
        }
    }
    ...
}

createContentPane возвращает Контейнер.Теперь, если бы я делал этот код вне ActionListener это сработает, потому что у меня будет к этому доступ.Но внутри этого я этого не делаю.у меня есть доступ к myFrame, который будет обновлен вместе с содержимым метода, но этого недостаточно, чтобы сделать то, что я хочу, если только я не смогу получить из этого this.

Мне также нужна информация из других переменных экземпляра, чтобы использовать 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());
            }
        }
    ...
 }

Соглашения Java-кода

Другие советы

external.this предоставит вам доступ к экземпляру включающего класса, если вы этого хотите...

Не совсем понимаю, о чем вы говорите, но внутренний класс имеет доступ ко всем членам включающего его класса.Чтобы получить доступ к указателю this включающего класса (например, для перехода к другим методам), используйте:

someMethod(External.this);

В вашем примере вы на самом деле усложняете его, используя «это».Вот два варианта, которые подойдут:

myFrame.setContentPane(createContentPane());

или:

myFrame.setContentPane(External.this.createContentPane());

Обратите внимание, что вы уже получаете доступ к myFrame таким же образом.

Сначала вам нужно расширить JFrame во внешнем классе следующим образом:

class External extends JFrame {
.....
.....
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top