21xrx.com
2025-06-27 22:16:19 Friday
文章检索 我的文章 写文章
Java 绘制五彩星星闪烁的代码
2023-06-14 21:41:36 深夜i     31     0
Java Graphics2D 绘图

在 Java 中,我们可以利用 Graphics2D 绘图工具类来绘制五彩闪烁的星星效果。下面是代码实现:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class StarDraw extends JPanel {
  @Override
  public void paint(Graphics g) {
    super.paint(g);
    Graphics2D g2d = (Graphics2D)g;
    
    g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
        RenderingHints.VALUE_ANTIALIAS_ON);
    
    for (int i = 1; i <= 5; i++) {
      int x = (int)(Math.random() * (getWidth() - 50));
      int y = (int)(Math.random() * (getHeight() - 50));
      Star star = new Star(x, y, 50, 30, 5, Color.WHITE, Color.getHSBColor((float)Math.random(), 1, 1));
      star.draw(g2d);
    }
    
  }
  
  public static void main(String[] args) {
    JFrame frame = new JFrame("Draw Star");
    frame.add(new StarDraw());
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(new Dimension(500, 500));
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
  }
}
class Star {
  private int x, y, rOuter, rInner, nPoints;
  private Color cInner, cOuter;
  
  public Star(int x, int y, int rOuter, int rInner, int nPoints, Color cOuter, Color cInner)
    this.x = x;
    this.y = y;
    this.rOuter = rOuter;
    this.rInner = rInner;
    this.nPoints = nPoints;
    this.cOuter = cOuter;
    this.cInner = cInner;
  
  
  public void draw(Graphics2D g2d) {
    int[] xOuter = new int[nPoints];
    int[] yOuter = new int[nPoints];
    int[] xInner = new int[nPoints];
    int[] yInner = new int[nPoints];
    
    double deltaAngle = Math.PI / nPoints;
    for (int i = 0; i < nPoints; i++) {
      double angle = deltaAngle + i * 2 * deltaAngle;
      int x = (int)(rOuter * Math.sin(angle));
      int y = (int)(rOuter * Math.cos(angle));
      xOuter[i] = this.x + x;
      yOuter[i] = this.y - y;
      
      x = (int)(rInner * Math.sin(angle + deltaAngle));
      y = (int)(rInner * Math.cos(angle + deltaAngle));
      xInner[i] = this.x + x;
      yInner[i] = this.y - y;
    }
    
    g2d.setColor(cOuter);
    g2d.fillPolygon(xOuter, yOuter, nPoints);
    
    g2d.setColor(cInner);
    g2d.fillPolygon(xInner, yInner, nPoints);
    
  }
}

运行代码,可以看到窗口中绘制了 5 个五边形的星星,并且每个星星的颜色都是随机的,并且在窗口中不停的闪烁着。

  
  

评论区