在您阅读本文之前,我只想说任何帮助都会对我有很大帮助,现在。我很绝望。我花了至少一个星期的时间试图在 Eclipse 中完成这项工作,我想我遗漏了一些明显的东西,我真的需要你的帮助。
现在,我的鼠标侦听器包含每个“房间”的 if 语句和这些 if 语句中的双 for 循环,告诉 JFrame 是否在 JFrame 的某个区域内单击鼠标以重新绘制相应的“房间”。
现在假设房间#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);