2

これは非常に初歩的な質問のようですが、答えがわかりません。

Java で新しい JFrame を作成するとします。新しいフレームには、デフォルトのコンテンツ ペインが付属しています。変数を宣言してそのフレームのコンテンツ ペインとして初期化すると、初期化した変数はフレームのコンテンツ ペインへの参照になりますか、それとも独自のものになりますか? 例:

JFrame frame = new JFrame();
Container panel = frame.getContentPane();

たとえば、コンテンツ ペインのレイアウトを変更したい場合、調整するpanelと変更と同じ効果が得られframe.getContentPane()ますか?

私が何を意味するかを正確に示すには:

frame.getContentPane().setLayout(new GridLayout());

これは次と同じ結果を作成しますか?

panel.setLayout(new GridLayout());

私がその後に行うことは、最後に言わなくてpanelも反映されますか?frameframe.setContentPane(panel);

4

4 に答える 4

1

絶対。それらはメモリ内の同じオブジェクトを指します。

風船に 2 本のひもを結ぶことを想像してみてください。1 つを保持し (あなたを と呼びましょうpanel)、もう 1 つの糸を友人に渡します (彼を と呼びましょうframe.getContentPane())。

あなたの友達が紐をたどって風船を見つけ、その上に帽子をかぶると(つまりframe.getContentPane().setLayout(new GridLayout());)、紐をたどると、帽子の付いた風船が見つかります!

于 2012-07-17T21:23:17.457 に答える
1

はい。メモリ内のオブジェクトは複数の参照を持つことができ、それらのいずれかに対する変更はすべての参照に反映されます (それらはすべて同じオブジェクトを指しているため)。詳細については、この例を参照してください。

于 2012-07-17T21:19:18.637 に答える
0

あなたのコード

JFrame frame = new JFrame();
Container panel = frame.getContentPane();

実際、変数panelがフレームのコンテンツ ペインを指すようにします。そう呼ぶ

panel.setLayout( new GridLayout() );

それを参照するように、コンテンツ ペインのレイアウトに影響しますpanel

ただし、よくある間違いは、次のようなことをすると、

JFrame frame = new JFrame();
Container panel = frame.getContentPane();
//... some more code

JPanel someOtherFancyPanel = ...;
panel = someOtherFancyPanel;

のコンテンツ ペインが にJFrameなりsomeOtherFancyPanelます。もちろん、そうではありません。最後のステートメントでは、panel変数がフレームのコンテンツ ペインを指すだけsomeOtherFancyPanelでなく、コンテンツ ペインを変更しないままにします。

于 2012-07-18T06:05:22.657 に答える
0

はい、それらは同じContainerオブジェクトを参照しています。

つまり、getContentPane()基になる への参照を返しますContainer。したがって、参照を使用するたびに、基になるオブジェクトが使用/影響を受けます。

于 2012-07-17T21:17:31.400 に答える