title: Repainting/refreshing JLabels on a JPanel
body: <p>I'm having trouble getting my JLabels in a 2D array to update during runtime.</p>
  
  <p>The program I'm working on is a variant of Connect Four. I create a 2D array of JLabels, which all default to an ImageIcon containing an image of a blank slot. Players 1 and 2 choose their colors, and on a player's turn, he can click to drop a piece into a column (gravity causes the piece to fall to the bottom or until it lands atop another piece).</p>
  
  <p>I'm pretty positive that my addToColumn method is working fine. My only problem is that I can't seem to get any of the JLabels to update. Here's the method I'm working on:</p>
  
  <p>p1, p2, and current are Player objects. grid[][] is a 2D array of integers set to 0, 1, or 2 to more easily track who owns which tiles. tiles[][] is my 2D array of JLabels.</p>
  
  <pre><code>public void addToColumn(int column) { // drop a tile in the specified column
  int i = 0;
  while (grid[column][5-i] != 0) i++; // move upward through the 6 rows of tiles
                                      // until we find an empty one
  if (current == p1) grid[column][5-i] = 1; // update to the current player's value
  else grid[column][5-i] = 2;
  
  tiles[column][5-i] = new JLabel(findColorIcon(current.getColor()));
  
  tiles[column][5-i].setIcon(findColorIcon(current.getColor()));
  
  repaint();
  </code></pre>
  
  <p>now with those last two lines changing the JLabel in tiles[][], obviously I don't need both, not sure which way is better... that's just some of what I've tried, to no avail. (my getColor() method returns a Color, and findColorIcon(Color c) returns the corresponding JLabel with that color of tile).</p>
  
  <p>and yes, I have added in my paintComponent method too:</p>
  
  <pre><code>@Override
  protected void paintComponent(Graphics g) {
  super.paintComponent(g);
  }
  </code></pre>
  
  <p>I've been stuck on this for a while now, and I feel like I'm missing something obvious. any suggestions?</p>