使用する場合
Container c = getContentpane();
&いつ使用するか
frame.getcontentpane();
コードが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
}
}
_getContentPane().setBackground(Color.YELLOW);
_
このコード行は理解するのが難しく、チューターは、Javaの学習を続けながら完全に理解するための基礎を築きます。最初に考慮する必要があるのは、objectをmethodで変更する規則です。 periodの左側にはobjectがあり、objectを変更するmethodは右側にありますピリオドの側面。ここでそのルールが適用されます。
containerにはいくつかのレイヤーがあります。レイヤーは、containerをオーバーレイする透明なフィルムと考えることができます。 Java Swingでは、オブジェクトを保持するために使用されるレイヤーはコンテンツペインと呼ばれます。オブジェクトはコンテナーのコンテンツペインレイヤーに追加されます。getContentPane()
メソッドは、オブジェクトを追加できるコンテンツペインレイヤーコンテンツペインは、Javaランタイム環境によって作成されたオブジェクトです。コンテンツペインの名前を知る必要はありません。 getContentPane()
を使用すると、コンテンツペインオブジェクトが置換され、メソッドを適用できるようになりますこのコード行では、コンテンツペインにオブジェクトを追加するのではなく、色を作成していますこのコード行は、デフォルトの色である白を黄色に変更するものであり、ブラウザで実行されているプログラムの例で黄色の四角形が表示されていることを思い出すかもしれません。長方形の領域は黄色。
これについて考える1つの方法は、次のように、コンテンツペインオブジェクトがgetContentPane()methodに置き換えられると考えることです。
_contentpaneobject.setBackground(Color.YELLOW);
_
上記のstatementが実際に表示されることはありませんが、statementの機能はあります。 コンテンツペインをgetContentPane()
メソッドで取得すると、コンテンツペインオブジェクトを変更できます。これは、上記の例ではcontentpaneobjectという名前になっています。 。このステートメントでは、コンテンツペインの色を変更します。そのステップは、チューターで次に示されます。
getContentPane()
の形式がmethodであることに注意してください。メソッドは小文字で始まり、括弧があります。括弧は空です。
さて、私は 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"));
}
}
ただし、本質的には、後でオブジェクトを追加できるように、コンテンツペインレイヤーを取得しています。 詳細はこちらをご覧ください
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();
}
}
_
JFrame
を拡張すると、BoxLayout
オブジェクトでgetContentPane()
メソッドを直接使用できます。しかし、アソシエーションルールを適用する場合(つまり、コード内でJFrame
のオブジェクト、つまりJFrame f=new JFrame()
を作成する場合)、Containerオブジェクトを作成し、このオブジェクトをBoxLayout()
に渡す必要があります引数として。
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();
}
}
コード内で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();
}
}