今天练习了一下Java GUI 编程,画了一个王八,给大家附上源码。

今天练习了一下Java GUI 编程,画了一个王八,给大家附上源码。

```java
package com.Jui_.test_;

import javax.swing.*;
import java.awt.*;

/**
 * @Package: com.Jui_.test_
 * @ClassName: Test01
 * @Author: Mr.Zhang
 * @CreateTime: 2022/1/12 22:19
 * @Description:
 */
public class Test01 extends JFrame {
    private MyPanel mp;

    public Test01() {
        mp = new MyPanel();
        this.add(mp);
        this.setTitle("龟虽寿");
        this.setSize(1920, 1080);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);

    }

    public static void main(String[] args) {
        Test01 test01 = new Test01();
    }
}

class MyPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(Color.WHITE);
        g.fillRect(0, 0, 1920, 1080);
        paintTortoiseBody(1920 / 2, 1080 / 2, g);
    }

    public void paintTortoiseTail(int x, int y, Graphics g) {
        //画尾巴
        g.setColor(Color.BLUE);
        g.drawOval(x + 100, y + 257, 126, 124);
        g.drawOval(x + 117, y + 327, 48, 48);
//        g.setColor(Color.BLACK);
//        g.drawLine(x+100,y+320,x+222,y+338);
        g.setColor(Color.WHITE);
        //裁剪上部分圆弧算法
        for (int i = x + 217, j = y + 286, k = x + 217, l = y + 320; i <= x + 226; i++, k++) {
            g.drawLine(i, j, k, l);
        }
        //裁剪下部分圆弧算法
        for (int i = x + 222, j = y + 338, k = x + 222, l = y + 320; i <= x + 226; i++, k++) {
            g.drawLine(i, j, k, l);
        }

    }

    public void paintTortoiseBody(int x, int y, Graphics g) {
        //使整体居中
        int firstX = x - 100, firstY = y - 200;
        paintTortoiseTail(firstX, firstY, g);
        g.setColor(Color.GREEN);
        //画头
        g.fillOval(firstX + 70, firstY - 80, 55, 70);
        //画脖子
        g.fillRect(firstX + 79, firstY - 18, 38, 55);
        //画眼睛
        g.setColor(Color.black);
        g.fillOval(firstX + 75, firstY - 55, 10, 10);
        g.fillOval(firstX + 110, firstY - 55, 10, 10);
        //画四只脚
        paintTortoiseFeet(firstX, firstY, g);
        //画龟壳
        g.setColor(Color.RED);
        g.fillOval(firstX - 30, firstY, 260, 320);
        //龟甲写字
        g.setColor(Color.BLACK);
        g.setFont(new Font("隶书", Font.BOLD, 50));
        g.drawString("龟", firstX + 75, firstY + 130);
        g.drawString("虽", firstX + 75, firstY + 180);
        g.drawString("寿", firstX + 75, firstY + 230);

    }

    public void paintTortoiseFeet(int x, int y, Graphics g) {
        //画四只脚
        //左上
        g.setColor(Color.GREEN);
        g.fillOval(x - 51, y + 32, 85, 40);
        g.setColor(Color.WHITE);
        //直线裁剪椭圆算法
        for (int i = x - 51, j = y + 52, k = x + 9, l = y + 72; j <= l && k >= i; j++, k--) {
            g.drawLine(i, j, k, l);
        }
        //右上
        g.setColor(Color.GREEN);
        g.fillOval(x + 166, y + 32, 85, 40);
        g.setColor(Color.WHITE);
        //直线裁剪椭圆算法
        for (int i = x + 208, j = y + 72, k = x + 250, l = y + 52; i <= k && l <= j; i++, l++) {
            g.drawLine(i, j, k, l);
        }
        //左下
        g.setColor(Color.GREEN);
        g.fillOval(x - 51, y + 248, 85, 40);
        //直线裁剪椭圆算法
        g.setColor(Color.WHITE);
        for (int i = x - 51, j = y + 268, k = x + 9, l = y + 248; j >= l && k >= i; j--, k--) {
            g.drawLine(i, j, k, l);
        }

        //右下
        g.setColor(Color.GREEN);
        g.fillOval(x + 166, y + 248, 85, 40);
        //直线剪裁椭圆算法
        g.setColor(Color.WHITE);
        for (int i = x + 208, j = y + 248, k = x + 250, l = y + 268; i <= k && l >= j; i++, l--) {
            g.drawLine(i, j, k, l);
        }

    }
}

运行结果如图:
运行结果如图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值