2017-05-16 2 views
1

Ich versuche, ein JFrame mit einem 2D-Array zu färben, um ein Raster für eine "Karte" für ein Schulprojekt zu erstellen. Das Problem ist, in der (0,0) Position des Rahmens, erscheint eine zufällige graue Box, alles nach rechts schieben. Es schiebt sogar den letzten Block an die erste Position der NEXT-Reihe, was mich sehr verwirrt.Rectangle-Erstellung in JFrame ohne erkennbaren Grund nach rechts verschoben

Ich berücksichtigte die Tatsache, dass Arrays mit dem Index "0" beginnen, und ich frage mich, warum es keine schwarze Box in der (0,0) Position zeichnet.

Hier sind die beiden relevanten Klassen in meinem Code sind:

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(); 
} 

}

für die Greueltat entschuldigte sich, dass das 2D-Array ist, dh zum Färben und Erkennen In welchem ​​Block stehst du auf. Aber ich bin verwirrt darüber, warum alles nach rechts und dann nach unten geschoben wird. Ich habe tausendmal die Berechnung der Blockerstellung und des Indexempfehlers betrachtet.

+0

Haben Sie versucht, die Farbe vor dem Zeichnen/Füllen der Rechtecke zu setzen – MadProgrammer

+0

Ja, das hat funktioniert. Sehr geschätzt! –

Antwort

1

ich glaube, Sie

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

nach dem setcolors setzen sollte, wenn ich mich nicht irre.

Für das erste Element zeichnen Sie eine Box und legen anschließend die Farbe fest. Lass es mich wissen, wenn das hilft. Wenn Sie den Hauptmethodencode haben, bin ich bereit, weiter zu helfen.

+0

Oh mein Gott. DANKE. Ich habe eine Woche lang an diesem Bug gearbeitet, sogar hart um ihn herum, was mir mehr Probleme bereitet hat. Können Sie mir erklären, warum das funktioniert? Ich möchte diesen Fehler nicht noch einmal machen. Ich danke dir sehr. –

+0

Soweit ich das beurteilen kann, ist es so (zum Beispiel mit realen Gegenständen): Du nimmst standardmäßig einen grauen Buntstift. Wenn Sie etwas zeichnen möchten, wird es grau gezeichnet. Sie müssen den richtigen Buntstift auswählen, den Sie zeichnen möchten, und dann zeichnen, was Sie brauchen. Nicht sicher, warum es Offset war, das erfordert ein bisschen mehr Debugging mit dem eigentlichen Code. Auch brauchen Sie wahrscheinlich nicht g2.draw, nur g2.fill. – user2980932

+0

Sieht so aus, als ob der Offset nur davon herrührt, wie die for-Schleife von dem funktioniert, was ich sehen kann. – user2980932

Verwandte Themen