public class AnimatedHeart extends JPanel implements Runnable {
private static final long serialVersionUID = 1L;
private static final int WIDTH = 640;
private static final int HEIGHT = 480;
private static final int DELAY = 10;
private static final int MAX_RAINBOW = 256;
private int x, y;
private float angle;
private float colorCount;
public AnimatedHeart() {
x = WIDTH / 2 - 50;
y = HEIGHT / 2 - 50;
angle = 0;
colorCount = 0;
Thread thread = new Thread(this);
thread.start();
}
@Override
public void run() {
while (true) {
angle += 0.02;
colorCount += 0.1;
if (colorCount >= MAX_RAINBOW) {
colorCount = 0;
}
repaint();
try {
Thread.sleep(DELAY);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
private void drawHeart(Graphics2D g) {
g.setColor(getRainbowColor(colorCount));
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.fillOval(x, y, 50, 50);
g.fillOval(x + 40, y, 50, 50);
g.fillArc(x, y - 20, 90, 90, 270, 90);
g.fillArc(x, y - 20, 90, 90, 270, -90);
}
private Color getRainbowColor(float count) {
int r = (int) (Math.sin(count * Math.PI / 128) * 127 + 128);
int g = (int) (Math.sin(count * Math.PI / 64) * 127 + 128);
int b = (int) (Math.sin(count * Math.PI / 32) * 127 + 128);
return new Color(r, g, b);
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
drawHeart(g2d);
}
public static void main(String[] args) {
JFrame frame = new JFrame("Animated Heart");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(WIDTH, HEIGHT);
frame.setLocationRelativeTo(null);
frame.add(new AnimatedHeart());
frame.setVisible(true);
}
}
用java画心,到JPanel展示
最新推荐文章于 2024-05-06 18:26:10 发布