web-dev-qa-db-ja.com

getContentPane()は正確に何をしますか?

使用する場合

Container c = getContentpane();

&いつ使用するか

frame.getcontentpane();
11
Chinmay Kale

コードがJFrameサブクラスの一部である場合、getContentPane()を使用する必要があります。コードがフレームの一部ではない場合(おそらく、アプリケーションのstatic main()メソッドを使用している場合)、JFrameオブジェクトを使用してgetContentPane()を呼び出す必要があります。それがframe.getContentPane()の機能です。

例:

public class TestApp extends JFrame {
    public static void main(String[] args) {
        TestApp frame = new TestApp();
        Container c = frame.getContentPane();
        // do something with c
        frame.pack();
        frame.show();
    }

    /* constructor */
    public TestApp() {
        Container c = getContentPane(); // same as this.getContentPane()
        // initialize contents of frame
    }
}
10
Ted Hopp
_getContentPane().setBackground(Color.YELLOW);
_

このコード行は理解するのが難しく、チューターは、Javaの学習を続けながら完全に理解するための基礎を築きます。最初に考慮する必要があるのは、objectmethodで変更する規則です。 periodの左側にはobjectがあり、objectを変更するmethodは右側にありますピリオドの側面。ここでそのルールが適用されます。

containerにはいくつかのレイヤーがあります。レイヤーは、containerをオーバーレイする透明なフィルムと考えることができます。 Java Swingでは、オブジェクトを保持するために使用されるレイヤーはコンテンツペインと呼ばれます。オブジェクトはコンテナーのコンテンツペインレイヤーに追加されます。getContentPane()メソッドは、オブジェクトを追加できるコンテンツペインレイヤーコンテンツペインは、Javaランタイム環境によって作成されたオブジェクトです。コンテンツペインの名前を知る必要はありません。 getContentPane()を使用すると、コンテンツペインオブジェクトが置換され、メソッドを適用できるようになりますこのコード行では、コンテンツペインにオブジェクトを追加するのではなく、色を作成していますこのコード行は、デフォルトの色である白を黄色に変更するものであり、ブラウザで実行されているプログラムの例で黄色の四角形が表示されていることを思い出すかもしれません。長方形の領域は黄色。

これについて考える1つの方法は、次のように、コンテンツペインオブジェクトがgetContentPane()methodに置き換えられると考えることです。

_contentpaneobject.setBackground(Color.YELLOW);
_

上記のstatementが実際に表示されることはありませんが、statementの機能はあります。 コンテンツペインgetContentPane()メソッドで取得すると、コンテンツペインオブジェクトを変更できます。これは、上記の例ではcontentpaneobjectという名前になっています。 。このステートメントでは、コンテンツペインの色を変更します。そのステップは、チューターで次に示されます。

getContentPane()の形式がmethodであることに注意してください。メソッドは小文字で始まり、括弧があります。括弧は空です。

enter image description here

enter image description here

9
Jaimin Patel

さて、私は APIに直接送ることができます

このフレームのcontentPaneオブジェクトを返します。

GUI初期化プロセスのすべての部分です 。 Javaのプロトコルは、実際、GUIを起動するための定型的なものです。

public class FlowLayoutExample extends JApplet {

  public void init () {
    getContentPane().setLayout(new FlowLayout ());
    getContentPane().add(new JButton("One"));
    getContentPane().add(new JButton("Two"));
    getContentPane().add(new JButton("Three"));
    getContentPane().add(new JButton("Four"));
    getContentPane().add(new JButton("Five"));
    getContentPane().add(new JButton("Six"));
  }
}

-ソース

ただし、本質的には、後でオブジェクトを追加できるように、コンテンツペインレイヤーを取得しています。 詳細はこちらをご覧ください

1
Coffee

JFrame を拡張している可能性が高いため、クラスはJFrameからメソッドを継承します。そのため、コードは次のようになります。

_public class MyClass extends JFrame {

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new MyClass();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public MyClass() {
        ...
        Container c = getContentPane();
    }
}
_

上記の例では、JFrameのメソッドを継承しているため、frame.getContentPane()を使用する必要はありません。つまり、getContentPane()と記述するだけで済みます。あるいは、ほとんどの場合、実際にJFrameクラスに新しい機能を追加しない限り、インスタンス変数としてinstantiating a JFrameになります。

_public class MyClass {
    private JFrame frame;

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    new MyClass();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    public MyClass() {
        ...
        Container c = frame.getContentPane();
    }
}
_
1
David Yee

JFrameを拡張すると、BoxLayoutオブジェクトでgetContentPane()メソッドを直接使用できます。しかし、アソシエーションルールを適用する場合(つまり、コード内でJFrameのオブジェクト、つまりJFrame f=new JFrame()を作成する場合)、Containerオブジェクトを作成し、このオブジェクトをBoxLayout()に渡す必要があります引数として。

  1. JFrameを拡張する場合:

    public class BoxLayOutTest extends JFrame {
        public BoxLayOutTest() {
            // TODO Auto-generated constructor stub
            setSize(300, 400);
            setVisible(true);
            getContentPane().setLayout(new  BoxLayout(getContentPane(), BoxLayout.X_AXIS));
            JButton b1 = new JButton("One");
            JButton b2 = new JButton("Two");
            JButton b3 = new JButton("Three");
            JButton b4 = new JButton("Four");
            JButton b5 = new JButton("Five");
    
            add(b1);
            add(b2);
            add(b3);
            add(b4);
            add(b5);
        }
    
        public static void main(String[] args) {
            new BoxLayOutTest();
        }
    }
    
  2. コード内でJFrameオブジェクトを作成する場合:

    public class TwoPanelinFrame {
        JFrame f;
    
        public TwoPanelinFrame() {
            f = new JFrame("Panel Test");
            f.setSize(600, 600);
            f.setVisible(true);
            Container c = f.getContentPane();
            f.getContentPane().setLayout(new BoxLayout(c, BoxLayout.X_AXIS));
    
            JButton b2 = new JButton("One");
            JButton b3 = new JButton("One");
            JButton b4 = new JButton("One");
            JButton b5 = new JButton("One");
    
            f.add(b2);
            f.add(b3);
            f.add(b4);
            f.add(b4);
        }
    
        public static void main(String[] args) {
            new TwoPanelinFrame();
        }
    }
    
0