Provides window and layout, also Panel for each Square
Creates Canvas
Creates Squares and the buttons that go with each Square
Provide drawSquares()
Packages up the model or "application data" in ivars, i.e., location and fill of square
Has pointer to canvas for redraw
Can draw itself
Accepts "semantic" call from button routines
Uses enum ButtonAction
"POJO" Plain Old Java Object
Initializes button with label, icon, etc
Remembers its Square, that it controls
Each button has its own listener, sends semantic action to its Square
Square(s), has pointer to Main
ButtonXXX, has pointer to its Square
Canvas, just creates it and passes its pointer
Widgets needed later are kept as ivars
Widgets needed only for creation are local variables, maybe passed to constructors