title: JButtons won't update on button click
body: <p>Currently displays a GUI with an 8x8 grid of randomized colored buttons. The newButton is to reset the score display to 0 and reset the grid with a fresh like it does on startup after being clicked. I haven't been able to find many solutions other than that it's to do with the way Java displays it's buttons and the way layering works. Here are the 2 classes I'm using.</p>
  
  <pre><code>import javax.swing.JFrame; 
  import javax.swing.*;
  import java.awt.event.*;
  import javax.swing.JPanel;
  import java.awt.Color;
  
  public class ShinyButtonsApp extends JFrame implements ActionListener {
  
      private static byte ROWS = 8;
      public int useThis; 
      ShinyButtons shiny = new ShinyButtons();
      public static ImageIcon[] icons = {new ImageIcon("RedButton.png"),
                                         new ImageIcon("OrangeButton.png"), 
                                         new ImageIcon("YellowButton.png"), 
                                         new ImageIcon("GreenButton.png"), 
                                         new ImageIcon("BlueButton.png"), 
                                         new ImageIcon("LightGrayButton.png"), 
                                         new ImageIcon("DarkGrayButton.png")}; 
  
  
      public ShinyButtonsApp(String title) { 
          super(title); // Set title of window 
          setDefaultCloseOperation(EXIT_ON_CLOSE); // allow window to close 
          setSize(578, 634); // Set size of window 
          setResizable(false);
  
          getContentPane().setLayout(null);   
  
          JLabel aLabel = new JLabel("Score: "); 
          aLabel.setLocation(10, 570); 
          aLabel.setSize(80,30); 
          getContentPane().add(aLabel);
  
          JTextField scoreField = new JTextField(); 
          scoreField.setText(Integer.toString(shiny.score));
          scoreField.setEditable(false);
          scoreField.setHorizontalAlignment(JTextField.RIGHT);
          scoreField.setLocation(60, 570); 
          scoreField.setSize(120,30);
          scoreField.setBackground(Color.WHITE); 
          getContentPane().add(scoreField);
  
          JButton newButton = new JButton("New Game");
          newButton.addActionListener(this);
          newButton.setLocation(348,570);
          newButton.setSize(110,30);
          getContentPane().add(newButton);
  
          JButton quitButton = new JButton("Quit");
          quitButton.setLocation(468,570);
          quitButton.setSize(80,30);
          getContentPane().add(quitButton);
  
          resetButtons2();
      } 
  
      public void actionPerformed(ActionEvent e) {
                  shiny.score = 0;
                  shiny.resetButtons();
                  resetButtons2();
      }
  
      public void resetButtons2() {
          for (int r=0; r&lt;ROWS; r++) {
              for (int c=0; c&lt;ROWS; c++) {
                  ImageIcon image1 = icons[(int)shiny.getButton(r,c)];
                  JButton button = new JButton(image1);
                  button.setLocation(10+(69*r),10+(69*c));
                  button.setSize(69,69);
                  button.setBorder(BorderFactory.createLineBorder(Color.GRAY,1));
                  getContentPane().add(button);
              }
          }
      }
  
      public static void main(String[] args) { 
          ShinyButtonsApp frame;      
          frame = new ShinyButtonsApp("Shiny Buttons"); // Create window 
          frame.setVisible(true); // Show window      
      }   
  }
  </code></pre>
  
  <p>and</p>
  
  <pre><code>import javax.swing.JFrame; 
  import javax.swing.*;
  import java.awt.event.*;
  import javax.swing.JPanel;
  import java.awt.Color;
  
  public class ShinyButtons extends JPanel{ 
      public static byte RED = 0; 
      public static byte ORANGE = 1; 
      public static byte YELLOW = 2; 
      public static byte GREEN = 3; 
      public static byte BLUE = 4; 
      public static byte LIGHT_GRAY = 5; 
      public static byte DARK_GRAY = 6; 
  
      public static byte ROWS = 8; 
  
      public byte[][] buttonTable;
  
      public int score = 0; 
  
      public ShinyButtons() { 
          buttonTable = new byte[ROWS][ROWS]; 
          resetButtons(); 
      } 
  
      public void resetButtons() { 
          for (int r=0; r&lt;ROWS; r++) 
              for (int c=0; c&lt;ROWS; c++) 
                  buttonTable[r][c] = (byte)(Math.random()*7); 
      } 
  
      public byte getButton(int r, int c) { return buttonTable[r][c]; } 
  
      public int getScore() { return score; }
  } 
  </code></pre>