在您閱讀本文之前,我只想說任何幫助對我非常有幫助,現在。我非常絕望。我花了至少一個星期的時間試圖在Eclipse中完成這項工作,我想我錯過了一些明顯的東西,我真的需要你的幫助。很奇怪的鼠標監聽器和If語句
現在,我的鼠標監聽器包含每個'room'的if語句和那些if語句中的double 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);
你必須在你的代碼中的錯誤。因爲你沒有顯示任何代碼,所以我們可以幫助你超越我。我知道我們很聰明,但不是那麼聰明。 – 2013-04-08 01:55:08
給我一下,我會很快添加代碼。編輯:好吧,我補充說,如果你能看到我做錯了什麼,它會幫助我很多。 – SelfDeceit 2013-04-08 01:56:26
在發佈代碼之前,您應該進行一些*嚴重的*調試。我會使用一個調試器或'println(...)'語句來顯示程序變量的狀態,試圖找出事情不正常的原因。否則,您可能會發布與您的問題無關的代碼。 – 2013-04-08 01:59:23