📄 example6_9.java
字号:
1. /* 演示双缓冲技术的效果 */
2. import java.awt.*;
3. import java.awt.event.*;
4. import java.applet.*;
5.
6. public class Example6_9 extends Applet
7. {
8. int gap = 3; //决定红色波纹线的疏密
9. int mx, my; //存放鼠标的坐标位置
10. boolean flicker = true; //控制闪烁的逻辑变量
11. Image buffer = null; //声明Image对象
12. int w, h; //存放Applet在屏幕上显示的宽和高
13.
14. public void init()
15. {
16. Dimension d = getSize(); //获取HTML文件中给出的Applet大小
17. w = d.width;
18. h = d.height;
19. buffer = createImage(w, h); //建立一个w宽h高的图像对象
20.
21. //下面复合语句为获取鼠标的坐标位置,并重绘图像
22. addMouseMotionListener(new MouseMotionAdapter() {
23. //按下鼠标左键时触发的方法事件
24. public void mouseDragged(MouseEvent me) {
25. mx = me.getX(); //获取鼠标的坐标位置
26. my = me.getY();
27. flicker = false; //设置可以使用双缓冲技术
28. repaint(); //重绘图像
29. }
30. //移动鼠标时触发的方法事件
31. public void mouseMoved(MouseEvent me) {
32. mx = me.getX(); //获取鼠标的坐标位置
33. my = me.getY();
34. flicker = true; //设置不使用双缓冲技术
35. repaint(); //重绘图像
36. }
37. });
38. }
39.
40. public void paint(Graphics g)
41. {
42. Graphics screengc = null;
43. if (!flicker)
44. {//获取Graphics图像对象
45. screengc = g;
46. g = buffer.getGraphics();
47. }
48. g.setColor(Color.cyan); //设置浅蓝色
49. g.fillRect(0, 0, w, h); //画出蓝色矩形
50.
51. g.setColor(Color.red); //设置红色
52. for (int i=0; i<w; i+=gap) //画出红色波纹线
53. g.drawLine(i, 0, w-i, h);
54. for (int i=0; i<h; i+=gap)
55. g.drawLine(0, i, w, h-i);
56.
57. //使用双缓冲技术
88. if (!flicker)
89. {
60. screengc.drawImage(buffer, 0, 0, null);
61. }
62. }
63.
64. public void update(Graphics g)
65. {
66. paint(g);
67. }
68.}
69./*
70. * <applet code=Example6_9.class width=250 height=250>
71. * </applet>
72.*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -