我正在尝试使用红色背景显示一个简单的窗口,但它不起作用。出于某种原因,我一直保持灰色背景,而我的代码是:
import java.util.*;
import java.awt.*;
import javax.swing.*;
class Courses extends JFrame {
private Image dbImage;
private Graphics dbg;
Courses(){
setTitle("Course Schedule");
setLayout(new FlowLayout());
getContentPane().setBackground(Color.red);
setSize(600,600);
setLocation(300,10);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
public void paint(Graphics g){
dbImage = createImage(getWidth(), getHeight());
dbg = dbImage.getGraphics();
paintComponent(dbg);
g.drawImage(dbImage, 0, 0, this);
}
public void paintComponent(Graphics g){
g.setColor(Color.white);
g.fillOval(100,100,100,100);
repaint();
}
}
public class canvas
{
public static void main(String[] args){
Courses C = new Courses();
}
}
正如你所看到我用Jframe扩展类并使用方法getContentPane()。setBackground(),所以这应该绘制一个红色背景(和一个白色椭圆)的窗口,但我得到一个灰色背景(用白色椭圆形)。有人能看出出了什么问题吗?
我也是第一次尝试使用缓冲画,我不确定它现在是否顺利,但这并不重要。
答案 0 :(得分:0)
在Java中,调用repaint会擦除屏幕上的所有绘制元素(Swing Components除外)。 这意味着调用getContentPane()。setBackground(Color.RED)只有在重新绘制帧时才能看到(你马上就做了)。为了防止这种情况,最好调用{{1在paint方法的开头,因为这允许JFrame在绘制之前呈现像背景颜色这样的视觉效果。
您还可以考虑使用super.paint(g)
后跟setColor(Color.RED)
来更改背景颜色。但是,这可能效率较低。