您的位置:首页 > 大数据 > 人工智能

关于awt/swing组件中paint, update, paintComponent, repaint的经验

2008-04-19 12:14 337 查看
1、Applet/JApplet:
repaint+paint -- dragged, paint
repaint+update+paint -- dragged, update

Applet: repaint+paint -- 自动重画
repaint+update -- 不自动重画
JApplet:都不自动重画

结论:awt组件中的paint方法自动重画背景,实际上可以说是update方法自动重画背景,由于重写了update方法,所以不自动重画了!!

双缓冲:update中画背景缓冲,paint中将背景缓冲绘制到前台图形中

2 、Frame/JFrame:
repaint+paint -- dragged, paint
repaint+update+paint -- dragged, update

Frame: repaint+paint -- 自动重画
repaint+update -- 不自动重画
JFrame: 都不自动重画

问题:双缓冲时,因为背景Frame/JFrame是不可显示的(isDisplayable()),所以无法执行createImage()方法,难道基于框架的绘图不支持双缓冲?

3、 Panel:
repaint+paint -- dragged, paint
repaint+update+paint -- dragged, update
repaint不执行paintComponent

JPanel:
repaint+update+paint -- dragged, update
repaint+paint+paintComponent -- dragged, paint
repaint+paintComponent -- dragged, paintComponent
repaint执行paintComponent, 不执行paintComponents, 使用super.paintComponent(g)可达到填充背景的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: