public void update(Graphics g) {//消除閃爍的作用if(offScreenImage == null) {offScreenImage = this.createImage(525,525);}Graphics gOff = offScreenImage.getGraphics();paint(gOff);g.drawImage(offScreenImage, 0, 0, null);}解釋下為什么上面程序能消除閃爍。閃爍是怎么產(chǎn)生的。什么時(shí)候圖像被覆蓋,什么時(shí)候被刷新??傊胫纼?nèi)部工作原理
1 回答

呼喚遠(yuǎn)方
TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊
swing是通過雙緩沖取消閃爍的, 雙緩沖就是使用兩幅圖,在屏幕上顯示一幅圖,然后在沒顯示在屏幕上的那份圖上更新,更新了以后顯示,而剛剛顯示在屏幕的那幅成了離屏圖像,這樣不斷交互;
怎么產(chǎn)生閃爍的呢,一般在更新的時(shí)候需要用背景色填充一下然后在畫組件的樣子,如果不用雙緩沖,那填充背景色被你看在眼里產(chǎn)生閃爍;
awt是重量級(jí)的,swing是輕量級(jí)的,awt和swing的paint,repaint,update不一樣;
repaint是將重繪的事件添加到事件隊(duì)列里,這只是表達(dá)一個(gè)請(qǐng)求,事件隊(duì)列有空了就重繪;
paint是真正的繪制(包括組件paintComponent,邊框paintBorder,子組件paintChildren);
swing里update幾乎不做什么事情;
swing里還有兩個(gè)方法,revalidate和dolayout,后者是重新調(diào)整布局使之有效,前者即調(diào)用了后者,又對(duì)invalidate做出響應(yīng)
添加回答
舉報(bào)
0/150
提交
取消