今天练习了一下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);
}
}
}
运行结果如图: