1 — background color doesn't show up. When you override the 'paintComponent' method you take over the reins from the swing team and must make arrangements to paint all of the space in your component (the JPanel). An easy way to do this is to call 'super' first thing
This tells the JPanel to paint it's default background. The red will now be painted onto the JPanel before you begin your custom painting. Another option is to leave out the calls to 'setBackground' in the constructor and 'super' in 'paintComponent' and do it yourself:
2 — The JButton that shows up in the upper left corner is a result of not painting the background. This is generally referred to as 'artifacts'.
3 — about the BoxLayout. This concerns layout managers and how swing puts things together. In your code you added 'drawPanel' to the 'center' section of a BorderLayout which expands the component in width and height to fill the available space. With this there is no need to be concerned about providing size information for the child component (DrawPanel). The 'setSize' method is useful only after the gui is realized so it has no affect here (and none in the center section of the BorderLayout in any event). We generally use it only for top–level containers, eg, JFrame.
The usual way to specify size information in swing is with the preferred size property. Usually a components layout manager will compute the preferred size in the process of laying out the child components. With a graphic component like DrawPanel the layout manager has no idea that you are drawing so you have to find a way to tell the parent container (JFrame) what size your component requires. One way is to call 'setPreferredSize' on or in (the constructor of) the component. Another is to override the 'getPreferredSize' method in the component and return the size information that you want, like this:
Now you can add your 'drawPanel' to a container with a layout manager that respects/uses the child components preferred size, eg, FlowLayout and GridBagLayout, and it will show up. Box layout is a specialized layout manager designed for buttons and/or similarly–sized components (see api). In some cases it may require a minimum and/or maximum size to work properly. Sometimes you can do this
or even put it inside the constructor of the component
BoxLayout can get tricky. The swing tutorial has more information on using layout managers starting on the page
Lesson: Laying Out Components Within a Container. And you'll find useful information and hints in the class api for each of the layout managers.