• 締切済み

javaのボタン型の配列について

1、とりあえず以下のような形です。 for(int a=0;a<14;a++){ for(int b=0;b<14;b++){ koma[a][b].addMouseListener(this); } } ..... public void mouseEntered(MouseEvent e){ for(int a=0;a<14;a++){ for(int b=0;b<14;b++){ if(e.getSource==koma[a][b]){ koma[a][b].setIcon(icon1); } } } } という感じで記述したのですが、試しにifの部分をe.getSource==koma と記述したところそれでもコンパイルは通りましたが、カーソルに合わせて画像は表示されませんでした. これはやはり、a,bと座標を指定しなかったからなのでしょうか? 2、あと、上と多少関係ある質問なのですが、 ある関数内で、 for(int b=0;b<14;b++){ for(int a=0;a<14;a++){ koma[a][b].addMouseListener(this); } } } } と記述し、 public void mouseEntered(MouseEvent e){ for(int b=0;b<14;b++){ for(int a=0;a<14;a++){ if(e.getSource()==koma[a][b]){ for(int B=-2;B<3;B++){ for(int A=-2;A<3;A++){ if(P[A+2][B+2]!=0){ if(a+B>=0&&a+B<=13&&b+A>=0&&b+A<=13) koma[a+B][b+A].setIcon(P1); } } } } } } return; } public void mouseExited(MouseEvent e) { for(int b=0;b<14;b++){ for(int a=0;a<14;a++){ if(e.getSource()==koma[a][b]){ for(int A=-2;A<3;A++){ for(int B=-2;B<3;B++){ if(board[a+4+A][b+4+B]==0){ koma[a+A][b+B].setIcon(icon0); } if(board[a+4+A][b+4+B]==101){ if(turn<=2){ koma[a+A][b+B].setIcon(hosi); } } } } } } } return; } と記述したところ、 (Pという[5][5]の配列で何かしらかの形をした図形?を表現して、表現する部分だけ1で表し、しない部分を0で表します。そして、それを[14][14]のkomaというボード上にマウスカーソルを中心に表現して、カーソルの移動に合わせて図形も移動するようにしたい) Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError at java.awt.AWTEventMulticaster.mouseExited(またはmouseEntered)(Unknown Source) というような、ほぼ無限ループのエラーが発生しました。 自分は、まだまだ初心者で、まだしっかりと理解していなくて、誤ったコーディングによって起きたエラーだというのは、わかりますが、何がダメだったのかわかりませんでした。。。 詳しい方、何がダメで、どう記述すればいいのか教えていただけませんでしょうか?

みんなの回答

  • KSOH
  • ベストアンサー率93% (29/31)
回答No.1

>自分は、まだまだ初心者で、まだしっかりと理解していなくて、誤ったコーディングによって起きたエラーだというのは、わかりますが、何がダメだったのかわかりませんでした。。。 バグ自体はベテランだって必ず作りこんでしまいますし、コードを見ただけでバグの原因がわからないこともしばしばです。ただ、初心者プログラマーの陥りがちな間違いは「デバッグせずにプログラムの動いた結果とソースコードを眺めただけで原因がわからない」と思ってしまうことだと思います。プログラミングするなら最小限のデバッグをしましょう。 ヒント: >カーソルに合わせて画像は表示されませんでした。 koma[a][b].setIcon(icon1); が実際に動いているかどうか質問文に記載されていません。ひょっとしてそれを確認していないのでは?動いたかどうかはデバッグプリントを入れてみればわかります。例えば以下のように。 if (...) {  System.out.format("koma[%d][%d] is set!\n", a, b);  koma[a][b].setIcon(icon1); } とにかく初心者のころは何がどう動くのか見ただけではわからないのが普通なのですから、せめてデバッグプリントを入れてデバッグしてみてください。自分でやったデバッグの結果わかったことを申し添えれば質問を見ている人が答えられる可能性があがると思います。

関連するQ&A