Generally, you want to override paintComponent() not paint(). This is likely the cause of your transparency issues. Second, you probably want to change the layout. By default panels use FlowLayout. You likely want to use BorderLayout or GridBagLayout or a mix of the two.