1

JFrame のレイアウトを BoxLayout に設定するときに、このキーワードの代わりにgetContentPane()を BoxLayout のパラメーター引数として使用する必要があるのはなぜですか。JPanel に BoxLayout を与えるには、これをパラメーターとして使用する必要があります。

これは、JFrame に、ガラス ペイン、階層化されたペイン、コンテンツ ペイン、およびメニュー バーという複数のレイヤーまたはパーツがあるためだと思います。したがって、thisキーワードは JFrame を参照しますが、レイアウト マネージャーを構成したいコンテンツ ペインは参照しません。そのため、代わりに getContentPane() を呼び出します。JFrame のコンテンツ ペインは実際には JPanel であると読みました。

要約すると、BoxLayout のターゲット パラメータは JPanel を受け入れますが、JFrame は受け入れませんが、JFrame のコンテンツ ペインは JPanel です。

class MyFrame1 extends JFrame {
    public MyFrame1() {    
        // This line does not work, why? 
        setLayout(new BoxLayout(this, BoxLayout.X_AXIS)); 
    }
}

class MyFrame2 extends JFrame {
    public MyFrame2() {    
        // This line works
        setLayout(new BoxLayout(getContentPane(), BoxLayout.X_AXIS));
    }
}

class MyPanel extends JPanel {
    public MyPanel() {
        // JPanel uses "this" keyword
        setLayout(new BoxLayout(this, BoxLayout.X_AXIS));
    }
}

JPanel には JFrame のような複数のペインがありますか? getContentPane() を使用しなければならない実際の理由は何ですか?

コンパイラが BoxLayout を共有できないと言った場合、JFrame を構成する複数のペイン間で BoxLayout を共有できないということですか?

4

1 に答える 1