Ваша проблема в том, что ваши цветные кнопки находятся в классе Grid4.Каждый раз, когда вы создаете новый объект ColourGrid, вы добавляете те же цветные кнопки в новый ColourGrid JFrame и повторно добавляете ActionListener к тем же кнопкам.Таким образом, каждый раз, когда это происходит, JButtons накапливает другой ActionListener, и довольно скоро, когда нажимается цветная кнопка, запускаются многие ActionListener, старые и новые, и все кнопки меняют цвет.
Решение состоит в том, чтобыЦветные кнопки являются частью класса ColourGrid, а не класса Grid4:
public class ColourGrid extends JFrame {
private JButton fillRed = new JButton("Red");
private JButton fillYellow = new JButton("Yellow");
private JButton fillBlue = new JButton("Blue");
private JButton fillGreen = new JButton("Green");
private JButton fillPurple = new JButton("Purple");
private JButton fillBrown = new JButton("Brown");
private JButton[] paintButton = { fillRed, fillYellow, fillBlue, fillGreen,
fillPurple, fillBrown };
private Color[] colours = { Color.RED, Color.YELLOW, Color.BLUE,
Color.GREEN, new Color(102, 0, 102), new Color(102, 51, 0) };
private JButton buttonPress;
Таким образом, каждый раз, когда вы создаете новый объект ColourGrid, он получает свежие новые JButtons с прикрепленным к каждому только одному ActionListener, и толькоизменения цвета самой последней кнопки сетки.
В остальном, все рекомендации, которые Эндрю дал вам, очень хорошие рекомендации.