- - PR -
JPanelの親Panelの取得方法
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-01-29 10:55
JFrame内に、JPanel(jpane1)をprivateで含んでいます。そのJPanel内に、別のJPanelを継承した自作MyPanel(jpane2)を配置しました。
この際、jpane2から、jpane1 を参照するメソッド等がありますでしょうか? APIを調べ、getParent()のようなメソッドがあったのですが、そうではないような挙動です。 現在、jpane1を、MyPanelのコンストラクタの引数渡して参照している状態です。 以上、アドバイスいただけると幸いです。 OS:WindowsXP Ver:J2SDK1.4.1 | ||||||||
|
投稿日時: 2007-01-29 12:00
getRootPane() あたりでしょうか?(自身なし)
| ||||||||
|
投稿日時: 2007-01-29 12:30
java.awt.Component#getParent()で正しいです。
java.awt.Componentの親が変更されない限り、java.awt.Component#getParent()で取得できます。 どういう挙動を期待しているのでしょうか? 期待した挙動と異なるのであれば、コードのどこかで親を 変更してしまっているだけでしょう。 | ||||||||
|
投稿日時: 2007-01-29 13:53
ご回答ありがとうございます。
期待している挙動をしないとは、getParent()の結果、どうしてもnullが返ってきてしまうものでして。 その後気づいてみると、jpane1にて、MyPanelをArrayListで保持していました。 そうはいっても、親は変わらないとは思うのですが…。 以上、よろしくお願い致します。 | ||||||||
|
投稿日時: 2007-01-29 14:06
いや、それ、「親」になってないですから。 この場合「親」にするには、jpanel1.add(jpanel2) とします。 そうすると jpanel2.getParent() が jpanel1 を返すようになるでしょう。 # panel(パネル) ? pane(ペーン) ? 意味を混同しないようにしましょう。 | ||||||||
|
投稿日時: 2007-01-29 23:35
お返事遅れました。
言葉が足りなくてすみません。 一応、ArrayListで保持する前に、jpanel1.add(jpanel2)をしております。 その上で、nullが返ってきてしまいます。 どこかで参照が切れているとは思いますが、尚も錯誤中です。 ご回答ありがとうございます。 | ||||||||
|
投稿日時: 2007-01-30 00:00
コードをシンプルに、シンプルにしていきましょう。
ある瞬間現象が発生しなくなるはずです。 現象が発生するコードとしないコードの間にバグが潜んでいます。
$ java -cp . Test true | ||||||||
|
投稿日時: 2007-01-30 00:46
コンポーネントツリーは、ルートコンテナをルート要素、
Componentを最小ノードとして、ツリー構造で構成されいます。 getParent()がnullを返すのは、コンポーネントツリーに接続されていない場合のみです。 それには、以下の2つが考えられます。 1.そもそも、親ノードに接続していない。 2.親ノードに接続されたが、その後、親ノードから切り離された。 原因を探るには、いくつか方法がありますが、 1つ目として、目的のコンポーネントを追加している(つもりの)java.awt.Containerに java.awt.event.ContainerListenerを設定して、そのコールバックメソッドで 動作(追加、削除が行われているかどうか)を確認します。 2つ目は、MyPanel生成時に、以下のコードを記述して生成したMyPanelを使用して、 動作を確認します。
|