Здравствуйте и добро пожаловать на ТАК!
Вы не используете свинг вправо. Вы должны делать весь свой рендеринг в paintComponent, который вызывается автоматически при необходимости Однако paintComponent в JFrame ничего не делает, так как JFrame содержит ContentPane (JFrame.getContentPane), и это фон, который вы хотите изменить. Изменение фона области содержимого должно быть простым:
myJFrame.getContentPane().setBackground(newColor);
Однако не все (J) компоненты закрашивают свой фон (JLabel для одного), поэтому вам может потребоваться создать JPanel и использовать myJFrame.setContentPane(...);
перед тем, как приведенный выше код
Примечание. Чтобы сделать Swing однопоточным (как и должно быть), используйте SwingUtilities.invokeLater (...) для создания / изменения классов Swing.
Примечание 2: Зацикливание в разгаре должно быть сделано, используя javax.swing.Timer. Вам не нужно все oop: установите новый фон в прослушивателе кликов, а затем вызовите repaint