我正在开发一个“paint-like”应用程序(一个小绘图软件)来熟悉 Java 2D 组件。这是我的问题:我有一个 JFrame,其 ContentPane 是从 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);
}
}
部分组件默认关闭背景。背景颜色仅适用于不透明的小部件。为小部件层次结构中应绘制其背景的所有组件调用以下方法:
component.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);
}
}
你需要在覆盖函数中包含超级函数。浏览器
protected void paintComponent(Graphics g){
super.paintComponent(g); // this sets the background normaly
g.setColor(Color.BLACK);
g.drawLine(0,0,getWidth(),getHeight());
}