簡體   English   中英

如何在Java中重畫

[英]How to repaint in Java

我正在學習GUI編程課程。 我很難理解如何將Box類重新繪制為其他顏色。 這是我的GUI類:

public class Box extends JPanel {

    private Color color;
    private int boxNumber;


    public Box(Color color, int boxNumber){
        this.boxNumber = boxNumber;
        this.color = color;
    }

    public void changeColor(){
        setBackgroundColor(Color.WHITE);
        repaint();
    }

    protected void paintComponent(Graphics g){
        super.paintComponent(g);
        setBackground(color);
    }
}

這是我將其添加到Frame

public class MainHeader {

    Box box[];
    public MainHeader(){

    }

    private void setBox(){

        box = new Box[4];
        Color color[] = {Color.RED, Color.YELLOW, Color.BLUE, Color.ORANGE};

        for(int i = 0; i < color.length; i ++){
            box[i] = new Box(color[i],i);
        }
    }

    private void gui(){
        JFrame f = new JFrame();
        f.setLayout(new GridLayout(2,2,1,1));
        setBox();
        for(Box b : box)
            f.add(b);
        f.setSize(500,500);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setResizable(false);
        f.setVisible(true); 
    }
}

首先,您不需要這樣做...

protected void paintComponent(Graphics g){
    super.paintComponent(g);
    setBackground(color);
}

您永遠都不想在ANY繪制方法中更改ANY組件的狀態,這只會導致問題無止境,並且可能會因為消耗CPU周期而使您的程序陷於癱瘓...

其次,您的Box類的構造函數從不設置Box的背景色。 實際上,您不需要維護對顏色值的引用,因為Box通過其繼承性已經支持此功能。

public Box(Color color, int boxNumber){
    this.boxNumber = boxNumber;
    setBackground(color);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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