A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 被冷气冻伤 中级黑马   /  2016-10-4 19:45  /  2443 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

有了这段程序,我也可以用我的方式给祖国庆生了!package com.heima.test;

import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.GeneralPath;

import javax.swing.JFrame;

public class PaintFlag extends JFrame {
        private static final long serialVersionUID = 1L;
        private int width = 288, height = width / 3 * 2;
        private double maxR = 0.15, minR = 0.05;
        private double maxX = 0.50, maxY = 0.50;
        private double[] minX = { 0.75, 0.85, 0.85, 0.75 };
        private double[] minY = { 0.35, 0.45, 0.60, 0.70 };

        public PaintFlag() {
                setTitle("黑马程序猿--为祖国庆生");
                setDefaultCloseOperation(EXIT_ON_CLOSE);
        }
        public void paint(java.awt.Graphics graphics) {
                super.paint(graphics);
                java.awt.Graphics2D g = (java.awt.Graphics2D) graphics;
                g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                RenderingHints.VALUE_ANTIALIAS_ON);

                // 画棋面
                g.setColor(java.awt.Color.red);
                g.fillRect(50, 50, width, height);

                g.setColor(java.awt.Color.yellow);
                // 画大星星
                double ox = height * maxX, oy = height * maxY;
                g.fill(createPentacle(ox, oy, height * maxR, -Math.PI / 2));

                // 画小星星
                for (int idx = 0; idx < 4; idx++) {
                        double sx = minX[idx] * height, sy = minY[idx] * height;
                        double theta = Math.atan2(oy - sy, ox - sx);
                        g.fill(createPentacle(sx, sy, height * minR, theta));
                }
        }

        /**
         * 创建一个五角星形状. 该五角星的中心坐标为(sx,sy),中心到顶点的距离为radius,其中某个顶点与中心的连线的偏移角度为theta(弧度)
         *
         * @return pentacle 一个☆
         */
        public static java.awt.Shape createPentacle(double sx, double sy,
                        double radius, double theta) {
                final double arc = Math.PI / 5;
                final double rad = Math.sin(Math.PI / 10) / Math.sin(3 * Math.PI / 10);
                GeneralPath path = new GeneralPath();
                path.moveTo(1, 0);
                for (int idx = 0; idx < 5; idx++) {
                        path.lineTo(rad * Math.cos((1 + 2 * idx) * arc),
                                        rad * Math.sin((1 + 2 * idx) * arc));
                        path.lineTo(Math.cos(2 * (idx + 1) * arc),
                                        Math.sin(2 * (idx + 1) * arc));
                }
                path.closePath();
                AffineTransform atf = AffineTransform.getScaleInstance(radius, radius);
                atf.translate(sx / radius, sy / radius);
                atf.rotate(theta);
                return atf.createTransformedShape(path);
        }

        public static void main(String[] args) {
                PaintFlag flag = new PaintFlag();
                flag.setBounds(100, 100, 400, 400);
                flag.setVisible(true);
        }
}

flag1.png (26.04 KB, 下载次数: 79)

flag1.png

评分

参与人数 1技术分 +1 收起 理由
橘子哥 + 1 灰常666

查看全部评分

30 个回复

倒序浏览
666                 
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
awt是什么包?是到了GUI就能学到了吗?
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
好 强无敌
回复 使用道具 举报
被冷气冻伤 来自手机 中级黑马 2016-10-5 00:24:34
报纸
可以,GUI的时候会学到
回复 使用道具 举报
顶顶顶~~
回复 使用道具 举报
66666666666
回复 使用道具 举报
ysm颜 中级黑马 2016-10-5 10:07:22
8#
回复 使用道具 举报
厉害了我的哥66666666666666666666
回复 使用道具 举报
ysm颜 发表于 2016-10-5 10:07
你是学什么的?

学java的 啊
回复 使用道具 举报
zhangchangzhi 发表于 2016-10-5 11:46
厉害了我的哥66666666666666666666

哈哈哈哈555555555555
回复 使用道具 举报

你才是大神
回复 使用道具 举报
被冷气冻伤 发表于 2016-10-5 18:04
学java的 啊

java能做出国旗了
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
barny 中级黑马 2016-10-5 20:36:21
14#
我想多为祖国母亲多过几天生日
回复 使用道具 举报
惠的海角 来自手机 中级黑马 2016-10-6 22:28:38
15#
感觉好强大,我啥时候也能这么六
回复 使用道具 举报
惠的海角 发表于 2016-10-6 22:28
感觉好强大,我啥时候也能这么六

老师说了这个没什么卵用,纯粹拿来装逼
回复 使用道具 举报
barny 发表于 2016-10-5 20:36
我想多为祖国母亲多过几天生日

同一个世界,同一个梦想
回复 使用道具 举报
ysm颜 发表于 2016-10-5 20:15
java能做出国旗了

你想做别的也可以
回复 使用道具 举报
666.厉害
回复 使用道具 举报
66666,庆生!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马