1. 程式人生 > >JFrame.paint(Graghics g) 方法重繪 視窗透明 解決方法

JFrame.paint(Graghics g) 方法重繪 視窗透明 解決方法

我們知道,Java中每次重繪都會呼叫paint方法。  publicvoid paint(Graphics g) {
    //
super.paint(g);
    Color c 
= g.getColor();
    g.setColor(
new Color(50,150,50));
    g.fillOval(tankPos.x, tankPos.y, tankWid, tankHei);
    g.setColor(c);
}
如果使用awt包裡面的Frame類來構建視窗的話,上面的方法沒有問題,但如果用他的子類swing裡的JFrame的話,每次重繪,只是重繪視窗邊框和paint方法裡的東西,視窗的背景並沒有被繪製出來,所以會看到窗口裡顯示的是下一層窗口裡要顯示的東西,是“透明”的。而且,如果你寫的程式是動畫效果時,repaint後上一幀的影象不會自動被清除,而是跟下一幀影象重疊。也就說明他的父類物件Frame可以完成工作(重新整理螢幕)沒有做。
所以,我們要先呼叫其父物件也就是java.awt.Frame的paint方法,
super.paint(Graphics g);

這樣就OK了.
或者,我們也可以手工在paint里加上重新整理螢幕的程式碼:
g.setColor(this.getBackground());
g.fillRect(0, 0, 視窗寬,視窗高);