![](/img/trans.png)
[英]Frame.getContentPane().setBackground(Color.black) doesn't
[英]getContentPane().setBackground() doesn't seem to work
我試圖使一個帶有紅色背景的簡單窗口出現,但是它不起作用。 由於某種原因,我的背景一直是灰色的,而我的代碼是這樣的:
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()方法,因此這應該繪制一個帶有紅色背景(和一個白色橢圓形)的窗口,但是卻得到一個灰色背景(帶有一個白色背景)橢圓)。 有人可以看到出什么問題了嗎?
我也嘗試第一次使用緩沖區繪畫,但我不確定現在是否進展順利,但這並不重要。
在Java中,調用repaint會擦除屏幕上所有繪制的元素(Swing Components除外)。 這意味着調用getContentPane()。setBackground(Color.RED)僅在重新繪制框架之前可見(您立即執行此操作)。 為避免這種情況,優良作法是在paint方法的開始處調用super.paint(g)
,因為這允許JFrame在繪制之前呈現諸如背景色的視覺效果。
您還可以考慮使用setColor(Color.RED)
然后使用clearRect(x, y, width, height)
更改背景顏色。 但是,這可能效率較低。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.