Java_GUI_画五角星

来源:互联网 发布:分子动力学模拟软件 编辑:程序博客网 时间:2024/04/28 03:53

import java.awt.Color;
import java.awt.Container;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;


public class StarTest
{

    public static void main(String[] args)
    {
        MyFrame frame = new MyFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

class MyFrame extends JFrame
{
    public MyFrame()
    {
        setBounds(200, 200, 400, 400);
        setTitle("Star");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Container con = getContentPane();
        con.add(new MyPanel());
    }
}

class MyPanel extends JPanel
{
    public void paintComponent(Graphics g)
    {
        Star star = new Star();
        star.draw(150, 250, 120, g);
        //star.draw(g, 150, 150, 100);
    }
}

class Star
{
    private final double PI = Math.PI;

    //(x0,y0)五角星的左下角顶点的坐标,r五角星的外接圆半径
    public void draw(int x0, int y0, int r, Graphics g)
    {
        int x1, y1, x2, y2, x3, y3, x4, y4;
        g.setColor(Color.red);
        //计算其它4个顶点的坐标
        x1 = (int) (x0 + r * Math.sin(PI / 5));
        y1 = (int) (y0 - r * (1 + Math.cos(PI / 5)));
        x2 = (int) (x0 + 2 * r * Math.sin(PI / 5));
        y2 = y0;
        x3 = (int) (x0 - 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
        y3 = (int) (y0 - 2 * r * Math.sin(PI / 5) * Math.cos(PI / 10));
        x4 = (int) (x2 + 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
        y4 = y3;
        //将顶点用直线依次连接起来
        g.drawLine(x0, y0, x1, y1);
        g.drawLine(x1, y1, x2, y2);
        g.drawLine(x2, y2, x3, y3);
        g.drawLine(x3, y3, x4, y4);
        g.drawLine(x4, y4, x0, y0);
    }

    //(x,y)五角星的中心点的坐标,为五角星的外接圆半径
    public void draw(Graphics g, int x, int y, int r)
    {
        int x0, y0, x1, y1, x2, y2, x3, y3, x4, y4;
        //计算5个顶点的坐标
        x0 = (int) (x - r * Math.sin(PI / 5));
        y0 = (int) (y + r * Math.cos(PI / 5));
        x1 = x;
        y1 = y - r;
        x2 = (int) (x + r * Math.sin(PI / 5));
        y2 = y0;
        x3 = (int) (x0 - 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
        y3 = (int) (y0 - 2 * r * Math.sin(PI / 5) * Math.cos(PI / 10));
        x4 = (int) (x2 + 2 * r * Math.sin(PI / 5) * Math.sin(PI / 10));
        y4 = y3;
        //将顶点用直线依次连接起来
        g.drawLine(x0, y0, x1, y1);
        g.drawLine(x1, y1, x2, y2);
        g.drawLine(x2, y2, x3, y3);
        g.drawLine(x3, y3, x4, y4);
        g.drawLine(x4, y4, x0, y0);
    }
}

原创粉丝点击