在JPanel上设置Java中的背景颜色不起作用

我正在研究一个“类似绘画”的应用程序(一个小绘图软件)来熟悉Java 2D组件。 这是我的问题:我有一个JFrame,其ContentPane是inheritance自JPanel的类的实例。 我想将背景颜色设置为白色,但它仍保持默认颜色… ContentPane对应的类名称为Container。 这是一个简化的代码:

public class Container extends JPanel { public Container() { super(); this.setBackground(Color.WHITE); } } 

JFrame构造函数包含以下行:

 this.setContentPane(mainContainer); 

我错过了什么吗?

谢谢。

这可以解决它……

 public class Container extends JPanel { public Container() { super(); this.setOpaque(true); this.setBackground(Color.WHITE); } } 

默认情况下,某些组件的背景会关闭。 背景颜色仅适用于不透明的小部件。 对于应该绘制其背景的窗口小部件中的所有组件,请调用以下方法:

 c.setOpaque(true); 

我也遇到了这个问题,只有这个问题与OP建议完全一致。

 // Only this works for me this.setBackground(Color.blue); 

示例类的整个代码在这里(仅用于显示我尝试放置/设置setBackground()的位置;

 import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.geom.Ellipse2D; import javax.swing.JFrame; import javax.swing.JPanel; public class CircleDraw extends JFrame { Float diameter = 150f; public CircleDraw() { super("Circle Draw"); this.setSize(300, 300); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.add(new CirclePanel(diameter)); this.setVisible(true); // Only this works for me this.setBackground(Color.blue); } public static void main(String[] args) { new CircleDraw(); } } class CirclePanel extends JPanel { Float diameter; public CirclePanel(Float diameter) { super(); // this.setOpaque(true); // this.setBackground(Color.WHITE); this.diameter = diameter; } @Override public void paintComponent(Graphics g) { int panelWidth = this.getSize().width; int panelHeight = this.getSize().height; setPreferredSize(new Dimension(300, 300)); Graphics2D comp2D = (Graphics2D) g; comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); comp2D.setStroke(new BasicStroke(1f)); // comp2D.setBackground(Color.white); comp2D.setPaint(Color.white); Ellipse2D.Float e1 = new Ellipse2D.Float((panelWidth / 2) - (diameter / 2), (panelHeight / 2) - (diameter / 2), diameter, diameter); comp2D.draw(e1); } }