- - PR -
メソッドが複数回呼ばれてしまいます。
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-06-30 14:42
カラーチューザーのカスタマイズ(パネルの削除・追加)をするプログラムを作成しています。パネルの上には1枚テーブルをのせます。
今回3枚のパネルを追加しようと思うのですが、パネルの追加に使うメソッドbuildChooser()が、すでに追加されたパネルでも呼び出されてしまうらしく、3枚のパネルを追加すると、1枚目に追加したパネルには3枚のテーブル、2枚目のパネルには2枚のテーブル、3枚目には1枚のテーブルがのってしまいます。 パネルを1枚だけ追加するのであればちゃんと1つテーブルが乗るのですが、2枚以上追加しようとすると上記のような状態になります。 このような状況をどうすればよいでしょうか? スーパークラスのメソッド(?)の扱い方がよく分かりません。 何方かご教授ください。よろしくお願い致します。 ソースの一部 ************************************************************************ jcc = new JColorChooser(); jcc.addChooserPanel(new ColorChooserCustom1()); jcc.addChooserPanel(new ColorChooserCustom2()); jcc.addChooserPanel(new ColorChooserCustom3()); ↑ここで呼び出されるColorChooserustom*()で、パネルの追加を行う ***ColorChooserCustom*.java*** public class ColorChooserCustom2 extends AbstractColorChooserPanel implements MouseListener{ ColorTable2 table2; Color color2; protected void buildChooser(){ table2 = new ColorTable2(); ←テーブルの追加 add(table2); table2.addMouseListener(this); } ↑このメソッドbuildChooser()が複数回呼ばれてるのではないかと思います 分かりにくくて申し訳ないのですが、 jcc.addChooserPanel(new ColorChooserCustom1()); で1枚目のパネルの追加 ColorChooserCustom1()のbuidChooser()でテーブルを乗せる jcc.addChooserPanel(new ColorChooserCustom2()); で2枚目パネルの追加 ColorChooserCustom2()のbuidChooser()でテーブルを乗せる このときにColorChooserCustom1()のbuidChooser()も呼び出されてしまっているのではないでしょうか・・・? |
|
投稿日時: 2008-06-30 15:19
JColorChooseを使ったことないし全体のコードもないので、どこが問題なのかは私にはわかりません。自分がこの状況に陥ったとしたら、デバッガでColorChooserCustom1のbuildChoose()にブレイクポイントをしかけて、2度目に来たときにどういう経路で来たか調べます。
[ メッセージ編集済み 編集者: スフレ 編集日時 2008-06-30 15:21 ] |
|
投稿日時: 2008-06-30 17:14
スフレさんの後付けになりますが、
new Throwable().printStackTrace(); を2回呼ばれているところに埋め込むと、 呼び出し元が追えるかと思います。 |
|
投稿日時: 2008-07-01 09:19
> スーパークラスのメソッド(?)の扱い方がよく分かりません。
どういう継承関係にあるの? スーパークラスなんか廃して、単純に、独立のチューザパネルを3つ作れば、スーパークラスのフィールドであるpanelが複数のサブクラスで使い回されるドジも、消えてなくなるでしょう。 継承によるクラス階層なんて、まったく要らんと思うけど…。 |
|
投稿日時: 2008-07-01 12:14
皆様、ご回答どうもありがとうございました。
どうも見当違いの質問をしてしまっていたみたいで、先ほど正しく動作させることが出来ました。 本当にありがとうございました。 |
|
投稿日時: 2008-07-01 12:19
どういう問題があってどうやって解決したんでしょうか?
|
|
投稿日時: 2008-07-01 14:28
AbstractColorChooserPanelクラスのbuildChooser()を、
ColorChooserCustom1.java,ColorChooserCustom2.java,ColorChooserCustom3.java で3回呼び出して下記のようにテーブルを追加していたのですが、 呼び出されるたびに内容が上書きされるのではなく、追加されていたみたいで、そのため呼び出した回数分、余分なテーブルが作成されていました。 フラグを立てて、if文で条件分けしたら上手くいきました。 protected void buildChooser(){ table2 = new ColorTable2(); add(table2); table2.addMouseListener(this); } ご回答ありがとうございました。 |
1