Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

同じパネルを複数の箇所に加えたい

SWINGを使いGUIを作成している所なのですが、上手くいかないところ
があるので質問します。

パネルAをパネルBに加えることはできるのですが、同じ(もしくは異
なるパネル)パネルにパネルAを複数回加えることが出来ません。
エラーは発生しませんが、一番最後に加えた部分だけしか表示されま
せん。

そもそも一つのパネル(パネルに限らずですが)は一つの箇所と決
まっているのでしょうか?

しようとしていることは、パネルAを変更すれば、複数の箇所に加え
たパネルAもすべて変更されるようにしたいです。

同じ中身でも、必要な数だけ用意して、全ていちいち変更する必要が
あるのでしょうか?

よろしくお願いします。

4

回答

7472

閲覧

4件の回答

評価

0

Swingはあまり詳しくないのですが、
パネルも画面を構成する素材の1つ(?)と考えれば
やはり表示したい箇所それぞれに別のパネルを置くものだと思います。
立方体を作成するために必要な正方形の紙は全部で6枚ですよね?
同じ大きさだからと言って、1枚の紙で立方体は作れません。
パネルも表示したい数だけ作成する必要があるでしょう。

> パネルAを変更すれば、複数の箇所に加えた
> パネルAもすべて変更されるようにしたいです。
これは可能だと思います。
パネルA、パネルB、パネルCを用意して、
同時にその中身を書き換えれば良いのですから、
パネルの中身を同じ変数にすれば実現可能ではないでしょうか?

評価

0

パネルを「加える」は、最終的に java.awt.Container.addImpl が呼び出さ
れます。その説明に「コンポーネントがこのコンテナの上位にはなく、null 
でない親がある場合は、このコンテナに追加される前に現在の親から削除さ
れます」とあります。
特定のパネルを、あちこちで使い回したい場合は、表示する直前に add して
ください。同時に同じパネルを複数表示することは出来ません。
http://java.sun.com/javase/ja/6/docs/ja/api/java/awt/Container.html
#addImpl(java.awt.Component,%20java.lang.Object,%20int)

評価

0

有り難うございます。

>恋さん
毎回同じ内容に変更するのは面倒なので、一度に出来ないかなと思いまし
た。ですが、時間の都合上簡略化しようとせず力技でいくことになりました
^^;;

>仙人さん
やはり追加すると削除されてしまうのですね。とりあえず、複数の物を作っ
て切り替えることにしました。

評価

0

コンストラクタかイニシャライズ・メソッドの内部で、
コンポーネントを構築してるの?

だったら、使い回したいコンポーネントは
独立したクラスにして、
必要なときにインスタンスを生成して使うようにすれば。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。