簡體   English   中英

getContentPane()。setBackground()似乎不起作用

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM