shannonredeemed

跟着王洋老师学编程 - 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)    收藏  举报