2017-05-16 22 views
1

我試圖用2D數組着色JFrame來爲學校項目創建一個「地圖」網格。 問題是,在框架的(0,0)位置,出現一個隨機的灰色框,將所有內容推向右邊。它甚至將最後一塊推到了下一排的第一個位置,這讓我非常困惑。JFrame中的矩形創建沒有明顯的原因右移

我考慮到數組以索引「0」開頭的事實,我想知道爲什麼它不在(0,0)位置繪製黑盒子。

下面是兩種相關的類在我的代碼:

public class Floor1Components extends JComponent { 
    public void paintComponent(Graphics g) { 
    Graphics2D g2 = (Graphics2D) g; 

    for (int y = 0; y < Map.floor1Schematics.length; y++) { //for every row 

     for(int x = 0; x < Map.floor1Schematics[0].length; x++) { //do something for every column 
      Rectangle block = new Rectangle((x*50), (y*50), 50, 50); 
      g2.draw(block); 
      g2.fill(block); 
      if(Map.floor1Schematics[y][x].equals("wl")) { 
       g2.setColor(Color.BLACK); 
      } 
      if(Map.floor1Schematics[y][x].equals("gr")) { 
       g2.setColor(Color.GREEN); 
      } 
      if(Map.floor1Schematics[y][x].equals("end")) { 
       g2.setColor(Color.RED); 
      } 
      if(Map.floor1Schematics[y][x].equals("ch")) { 
       g2.setColor(Color.YELLOW); 
      } 
      if(Map.floor1Schematics[y][x].equals("pv")) { 
       g2.setColor(Color.GRAY); 
      } 
     } 

    } 
} 

}

public class Map { 

public static boolean floor1 = true; 
public static boolean floor2 = false; 
public static boolean floor3 = false; 

public static JFrame frame = new JFrame(); 

public static String floor1Schematics[][] = 
    { 
{"wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl"}, 
{"wl","gr","gr","gr","wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl","gr","gr","gr","wl"}, 
{"wl","gr","ch","gr","wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl","gr","ch","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","wl","wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl","wl","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","pv","pv","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","pv","pv","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","wl"}, 
{"wl","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","pv","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","pv","pv","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","pv","pv","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","wl","wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl","wl","wl"}, 
{"wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl"}, 
{"wl","gr","ch","gr","wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl","gr","ch","gr","wl"}, 
{"wl","gr","gr","gr","wl","gr","gr","gr","gr","gr","gr","gr","gr","gr","pv","pv","gr","gr","gr","gr","gr","gr","gr","gr","gr","wl","gr","gr","gr","wl"}, 
{"wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl","wl"}, 

    }; 

public static void createFrame() { 

    frame.setSize(1600,1600); 
    frame.setTitle("Frame"); 
    frame.setResizable(false); 
    //frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    //PlayerModel player = new PlayerModel(); 
    //frame.add(player); 
    //frame.setVisible(true); 
    if (floor1 && !floor2 && !floor3) { 
     Floor1Components floor1 = new Floor1Components(); 
     frame.add(floor1); 
     frame.setVisible(true); 
    } 
} 

public static void main(String[] args) { 
    createFrame(); 
} 

}

道歉即2D陣列暴行,即對於着色和檢測你站在什麼地方。但我很困惑,爲什麼一切都被推到了正確的位置,然後又被放倒了。我已經完成了數千次塊創建和索引推薦的數學計算。

+0

您是否在繪製/填充矩形之前嘗試設置顏色 – MadProgrammer

+0

是的,這工作。非常感激! –

回答

1

我想你應該把

 g2.draw(block); 
     g2.fill(block); 

您setcolors後,如果我沒有記錯。

對於第一個元素,您正在繪製一個框,然後設置顏色。讓我知道這是否有幫助。如果你有主要的方法代碼,我願意進一步幫助。

+0

哦,我的天啊。謝謝。我一直在研究這個bug一個星期,甚至對它進行硬編碼,這導致了更多的問題,並且都是因爲這個原因。你能向我解釋爲什麼這有效嗎?我不想再犯這種相同的錯誤。非常感謝。 –

+0

據我所知,它是這樣的(使用真實世界的物品,例如):默認情況下,你拿起一支灰色的鉛筆。如果你想繪製一些東西,它會把它畫成灰色。你需要選擇你想要繪製的正確的彩色鉛筆,然後畫出你需要的東西。不太確定它爲什麼被抵消,但實際的代碼需要更多的調試。 另外你可能不需要g2.draw,只需g2.fill。 – user2980932

+0

看起來像剛剛從for循環工作的偏移量來看我所看到的。 – user2980932