あなたがこれを読む前に、どんな助けも今私を大いに助けるだろうと言いたいだけです. 私はとても絶望的です。私は 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);