2

でレイアウトを設定しJFramesetLayoutからそれgetLayoutを取得すると、別のが得られますLayoutManager。ここで何が起こっているの?

public class Lay {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                java.awt.Container container =
                    new javax.swing.JFrame();
                    //new javax.swing.JPanel();
                java.awt.LayoutManager layout =
                    new java.awt.GridLayout();
                container.setLayout(layout);
                layout = container.getLayout();
                System.err.println(layout);
            }
        });
    }
}

与える

java.awt.BorderLayout[hgap=0,vgap=0]

しかし、私が置き換えるJFrameと、JPanel

java.awt.GridLayout[hgap=0,vgap=0,rows=1,cols=0]
4

1 に答える 1

11

Java APIJFrameから:

public void setLayout(LayoutManager manager)

を設定しLayoutManagerます。呼び出しを条件付きでに転送するためにオーバーライドされますcontentPane。詳細については、を参照しRootPaneContainerてください。

そしてRootPaneContainerページから:

JFrameこのインターフェースは、特に単一のを含むのようなコンポーネントを処理する必要があるSwingGUIビルダーのマーカーとして機能しますJRootPane。便宜上、、、、JFrameおよび、JDialogデフォルトではJWindow、転送、デフォルトでは、、およびメソッドへのすべての呼び出しは。これは、次の電話をかけることができることを意味します。JAppletJInternalFrameaddremovesetLayoutcontentPane

rootPaneContainer.add(component);

それ以外の:

rootPaneContainer.getContentPane().add(component);

AJRootPaneは、すべてのヘビーウェイトコンポーネントがネイティブOSウィンドウのように表示するために使用する共通のコンポーネントです。メニューバーを処理したり、ボタンを閉じる/最小化/最大化するなどJFrame、実際の作業を行う事実を隠そうとしJRootPaneますが、この場合は混乱を招きます。

于 2009-07-08T19:37:32.937 に答える