MoveListenerのメソッドなので、なぜオブジェクトがGridButtonなのですか?this.setContentAreaFilled(true)に変更すると、オブジェクトがMoveListenerであるため、コンパイルされません。
private class GridButton extends JButton {
public GridButton() {
setOpaque(false);
setContentAreaFilled(false);
setBorderPainted(false);
addActionListener(new MoveListener());
}
private class MoveListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
setContentAreaFilled(true);
}
}
}
MoveListener
内部クラスは宣言されていないため、static
本質的に、それを使用する外部クラスインスタンスへの参照を保持します。
Javaのコンパイラは外部クラスへの参照を持っているため、現在のスコープでその名前を持つ唯一のアクセス可能なメソッドであるため、Javaのコンパイラは意味を推測できます。メソッド内のをthis
参照しますが、インスタンスを明示的に要求しているため、実行した場合も同様に機能するはずです。MoveListener
actionPerformed
GridButton.this.setContentAreaFilled(true)
GridButton
OuterClassName.this.methodName
スタイルを使用する必要があるのは、外部クラスと内部クラスが同じ名前と署名を持つメソッドを共有しているため、どちらのメソッドを呼び出す必要があるかがあいまいになる場合のみです。
このトピックの詳細については、ネストされたクラスを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加