0

あなたがこれを読む前に、どんな助けも今私を大いに助けるだろうと言いたいだけです. 私はとても絶望的です。私は Eclipse でこの作業を行うために少なくとも 1 週間を費やしました。明らかな何かが欠けていると思います。本当にあなたの助けが必要です。

現在、私のマウス リスナーには、各「部屋」の if ステートメントと、JFrame の特定の領域内でマウスをクリックして対応する「部屋」を再描画するかどうかを JFrame に伝える if ステートメント内の二重 for ループが含まれています。

ここで、部屋 #4 が #5 または #6 のいずれかにつながるとします。#4 > #6 の場合、問題はありません。#5 > #4 から問題があります。何らかの理由で、部屋 #4 のイベント リージョンが #5 に表示されるので (表示されるべきではありません)、前のイベント リージョンをクリックすると、#4 または #6 に移動できるようになりました。

他の「部屋」でこれを試しましたが、問題は発生しません。複数のパスに接続されている部屋の間を行ったり来たりするには、何かをする必要があるかもしれないと結論付けました。簡単にするために、視覚的な経路と分離されたコードを添付しました (数字は単に部屋番号です)。

MouseAdapter mouseHandler = new MouseAdapter()
      {
          public void mouseClicked(MouseEvent e)
          {
             //System.out.println(e.getPoint());
            if(n==6)//R6
             {
                for(int i = 116;i<132;i++)//3a
              {
                  if(e.getX() == i)
                  {
                      for(int j = 388;j<404;j++)
                      {
                          if(e.getY() == j)
                          {
                            n = 7;//3b
                              return;
                          }
                      }
                  }
              }
                 for(int i = 116;i<132;i++)//2b
                  {
                      if(e.getX() == i)
                      {
                          for(int j = 308;j<324;j++)
                          {
                              if(e.getY() == j)
                              {
                                 n = 4;//2a
                                  return;
                              }
                          }
                      }
                  }
                 for(int i = 580;i<596;i++)//8a
              {
                  if(e.getX() == i)
                  {
                      for(int j = 372;j<388;j++)
                      {
                          if(e.getY() == j)
                          {
                             n = 2;//8b
                              return;
                          }
                      }
                  }
              }
             }
            if(n==5)//R5
             {
                 for(int i = 220;i<268;i++)//1b
                  {
                      if(e.getX() == i)
                      {
                          for(int j = 437;j<485;j++)
                          {
                              if(e.getY() == j)
                              {
                                  n = 4;//1a
                                  return;
                              }
                          }
                      }
                  }
             }
            if(n==4)//R4
             {
                 for(int i = 179;i<244;i++)//2a
                  {
                      if(e.getX() == i)
                      {
                          for(int j = 403;j<468;j++)
                          {
                              if(e.getY() == j)
                              {
                                 n = 6;//2b
                                  return;
                              }
                          }
                      }
                  }
                 for(int i = 436;i<500;i++)//1a
                      {
                          if(e.getX() == i)
                          {
                              for(int j = 403;j<468;j++)
                              {
                                  if(e.getY() == j)
                                  {
                                     n = 5;//1b
                                      return;
                                  }
                              }
                          }
                      }
                 for(int i = 274;i<406;i++)//A2
                  {
                      if(e.getX() == i)
                      {
                          for(int j = 193;j<276;j++)
                          {
                              if(e.getY() == j)
                              {
                                  n = 0;//A1
                                  return;
                              }
                          }
                      }
                  }
             }
            if(n==0)//R0
             {
                 for(int i = 459;i<493;i++)//A1
              {
                  if(e.getX() == i)
                  {
                      for(int j = 110;j<133;j++)
                      {
                          if(e.getY() == j)
                          {
                              n = 4;//A2
                              return;
                          }
                      }
                  }
              }
             }
            repaint();
             //http://stackoverflow.com/questions/5654208/making-a-jbutton-invisible-but-clickable
          }
          public void mouseMoved(MouseEvent e)
          {
              // = e.getPoint();
              //repaint();
          }
      };

      addMouseMotionListener(mouseHandler);
      addMouseListener(mouseHandler);

ここに画像の説明を入力

4

2 に答える 2

3

マウスが領域内をクリックしたかどうかを確認しようとしているようで、ネストされた for ループでこれを実行しようとしているようです。この目的で for ループを使用しないでください。代わりに if ブロックを使用してください。最も簡単な方法は、Rectangles を作成し、マウスがそのcontains(Point p)メソッドを使用してその内部をクリックしたかどうかを確認することです。

于 2013-04-08T02:02:20.413 に答える