跟着王洋老师学编程 - 1.2.2 窗体菜单实现原理与paint绘图(问题是:尾巴的圆弧怎么计算。。。)
一、窗体菜单实现原理
DOS中 -
Windows中 -
二、paint绘图
第一版,所用的类没有导入
1 import java.awt.Frame;
2 import java.awt.Panel;
3 public class MyTest{
4 public static void main(String[] args){
5 Frame w = new Frame();
6 w.setSize(300,400);
7 w.show();
8 }
9 class MyPanel extends Panel{
10 public void paint(Graphics g){
11 g.drawLine(10,20,30,40);
12 }
13 }
14 }
【报错】

【解决方案】增加Graphics类导入
1 import java.awt.Frame;
2 import java.awt.Panel;
3 import java.awt.Graphics;
4 public class MyTest{
5 public static void main(String[] args){
6 Frame w = new Frame();
7 w.setSize(300,400);
8 w.show();
9 }
10 class MyPanel extends Panel{
11 public void paint(Graphics g){
12 g.drawLine(10,20,30,40);
13 }
14 }
15 }
第二版,运行class文件,窗体中没有画线
编译完成后,形成两个.class文件:

分别运行,结果一个报错、一个只显示窗体,无绘图内容:
第三版,窗体上添加画布代码,编译报错
1 import java.awt.Frame;
2 import java.awt.Panel;
3 import java.awt.Graphics;
4 public class MyTest{
5 public static void main(String[] args){
6 Frame w = new Frame();
7 w.setSize(300,400);
8 // 增加画布
9 MyPanel mp = new MyPanel();
10 w.add(mp);
11
12 w.show();
13 }
14 class MyPanel extends Panel{
15 public void paint(Graphics g){
16 g.drawLine(10,20,30,40);
17 }
18 }
19 }
编译报错如下:

搜索报错信息,在如下链接中得到启发:
https://wenku.csdn.net/answer/421c907d1d5cc683e6263dc7dfa950c5

【解决方案】将画布类移出MyTest类的定义,单独定义
1 import java.awt.Frame;
2 import java.awt.Panel;
3 import java.awt.Graphics;
4 public class MyTest{
5 public static void main(String[] args){
6 Frame w = new Frame();
7 w.setSize(300,400);
8
9 MyPanel mp = new MyPanel();
10 w.add(mp);
11
12 w.show();
13 }
14 }
15 class MyPanel extends Panel{
16 public void paint(Graphics g){
17 g.drawLine(10,20,30,40);
18 }
19 }
编译后,生成两个.class文件:

运行MyTest.class文件,结果如下:

三、画王八
https://tool.oschina.net/apidocs
1 import java.awt.Frame; 2 import java.awt.Panel; 3 import java.awt.Graphics; 4 import java.awt.Color; 5 public class MyTest{ 6 public static void main(String[] args){ 7 Frame w = new Frame(); 8 w.setSize(300,400); 9 // 创建画布对象 10 MyPanel mp = new MyPanel(); 11 // 添加画布至窗体 12 w.add(mp); 13 14 w.show(); 15 } 16 } 17 class MyPanel extends Panel{ 18 public void paint(Graphics g){ 19 20 System.out.println(g.getColor()); 21 22 //g.setColor(Color.green); 23 // Step1. 画头 24 g.drawOval(100,20,80,100); 25 // 画眼白 - 白色 26 g.drawOval(120,30,15,15); 27 g.drawOval(145,30,15,15); 28 // 画眼珠 - 黑色 29 g.fillOval(118,28,14,14); 30 g.fillOval(142,28,14,14); 31 32 33 // Step2. 画四肢 34 g.drawOval(20,120,60,80); 35 g.drawOval(200,120,60,80); 36 g.drawOval(20,220,60,80); 37 g.drawOval(200,220,60,80); 38 39 // Step3. 画龟壳 40 g.setColor(new Color(20,100,30)); 41 g.fillOval(50,100,180,200); 42 // 画龟壳文理 43 g.fillPolygon() 44 // Step4. 画尾巴 45 // g.draw 46 } 47 }
编程教学
import java.awt.Frame; import java.awt.Panel; import java.awt.Graphics; import java.awt.Color; public class MyTest{ public static void main(String[] args){ Frame w = new Frame(); w.setSize(300,400); // 创建画布对象 MyPanel mp = new MyPanel(); // 添加画布至窗体 w.add(mp); w.show(); } } class MyPanel extends Panel{ public void paint(Graphics g){ System.out.println(g.getColor()); //g.setColor(Color.green); // Step1. 画头 g.drawOval(100,20,80,100); // 画眼白 - 白色 g.drawOval(120,30,15,15); g.drawOval(145,30,15,15); // 画眼珠 - 黑色 g.fillOval(118,28,14,14); g.fillOval(142,28,14,14); // Step2. 画四肢 g.drawOval(20,120,60,80); g.drawOval(200,120,60,80); g.drawOval(20,220,60,80); g.drawOval(200,220,60,80); // Step3. 画龟壳 g.setColor(new Color(20,100,30)); g.fillOval(50,100,180,200); // 画龟壳文理 g.setColor(new Color(20,100,60)); // 定义每个点的X轴坐标数组 int[] xpoints=new int[]{70,115,165,215,165,110}; // 定义每个点的Y轴坐标数组 int[] ypoints=new int[]{200,150,150,200,250,250}; g.fillPolygon(xpoints,ypoints,6); // 画龟壳上的线 g.setColor(new Color(120,90,90)); g.drawLine(55,210,70,200); g.drawLine(73,132,115,150); g.drawLine(200,130,165,150); g.drawLine(226,195,215,200); g.drawLine(200,272,165,250); g.drawLine(73,265,110,250); // Step4. 画尾巴 //g.drawArc(150,300,60,60,180,45); //g.drawArc(150,205,110,95,180,60); //g.drawArc(130,217,150,150,180,70); } }


继续修改,直到遗留一道数学题
import java.awt.Frame; import java.awt.Panel; import java.awt.Graphics; import java.awt.Color; public class MyTestC{ public static void main(String[] args){ Frame w = new Frame(); w.setSize(300,400); // 添加画布 MyPanelC mp = new MyPanelC(); w.add(mp); w.show(); } } class MyPanelC extends Panel{ public void paint(Graphics g){ //System.out.println(g.setColor()); // 1. 画头 // 1.1 画脑壳 g.drawOval(100,20,80,100); // 1.2 画眼廓 g.drawOval(120,30,15,15); g.drawOval(145,30,15,15); // 1.3 画眼球 g.fillOval(118,28,14,14); g.fillOval(142,28,14,14); // 2. 画四肢 g.drawOval(20,120,60,80); g.drawOval(200,120,60,80); g.drawOval(20,220,60,80); g.drawOval(200,220,60,80); // 3. 画龟壳 // 3.1 画龟壳外廓 g.setColor(new Color(10,100,30)); g.fillOval(50,100,180,200); // 3.2 画龟壳上的纹理 g.setColor(new Color(20,100,60)); int[] xpoints=new int[]{70,115,165,215,165,110}; int[] ypoints=new int[]{200,150,150,200,250,250}; g.fillPolygon(xpoints,ypoints,6); // 3.3 画龟壳上的线 g.setColor(new Color(120,90,90)); g.drawLine(55,210,70,200); g.drawLine(73,132,115,150); g.drawLine(200,130,165,150); g.drawLine(226,195,215,200); g.drawLine(200,272,165,250); g.drawLine(73,265,110,250); // 4. 画尾巴 // g.setColor(Color.red); g.drawLine(130,297,140,320); g.drawLine(140,320,165,370); g.drawLine(150,297,155,320); g.drawLine(155,320,165,370); } }
编译执行,如下:

这里涉及到的问题是:尾巴的圆弧怎么计算。。。
posted on 2023-11-10 23:02 Shannon_Zhang 阅读(18) 评论(0) 收藏 举报
浙公网安备 33010602011771号