How to make background work in custom JComponent?

awt, background, graphics, java, swing

Solution

JComponent does not paint its background. You can either paint it yourself, or use JPanel which does paint its background

Problem

In the following example, I have a custom `JComponent` being drawn on green background, but it does not appear. Why does this happen? ``` public class Test_Background { public static class JEllipse extends JComponent { private final Ellipse2D ellipse; public JEllipse(int width, int height) { ellipse = new Ellipse2D.Double(0, 0, width, height); setOpaque(true); setBackground(Color.GREEN); } @Override public Dimension getPreferredSize() { return new Dimension((int) ellipse.getBounds().getMaxX(), (int) ellipse.getBounds().getMaxY()); } @Override protected void paintComponent(Graphics g) { super.paintComponent(g); ((Graphics2D) g).draw(ellipse); } } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { JEllipse e = new JEllipse(400, 300); JFrame f = new JFrame("Background Test"); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.add(e); f.pack(); f.setVisible(true); } }); } } ```

Original source