82 lines
2.6 KiB
Java
82 lines
2.6 KiB
Java
package org.rosettacode.yinandyang;
|
|
|
|
import java.awt.Color;
|
|
import java.awt.Graphics;
|
|
import java.awt.Image;
|
|
import java.awt.image.BufferedImage;
|
|
import javax.swing.ImageIcon;
|
|
import javax.swing.JFrame;
|
|
import javax.swing.JLabel;
|
|
|
|
public class YinYangGenerator
|
|
{
|
|
private final int size;
|
|
|
|
public YinYangGenerator(final int size)
|
|
{
|
|
this.size = size;
|
|
}
|
|
|
|
/**
|
|
* Draw a yin yang symbol on the given graphics context.
|
|
*/
|
|
public void drawYinYang(final Graphics graphics)
|
|
{
|
|
// Preserve the color for the caller
|
|
final Color colorSave = graphics.getColor();
|
|
|
|
graphics.setColor(Color.WHITE);
|
|
// Use fillOval to draw a filled in circle
|
|
graphics.fillOval(0, 0, size-1, size-1);
|
|
|
|
graphics.setColor(Color.BLACK);
|
|
// Use fillArc to draw part of a filled in circle
|
|
graphics.fillArc(0, 0, size-1, size-1, 270, 180);
|
|
graphics.fillOval(size/4, size/2, size/2, size/2);
|
|
|
|
graphics.setColor(Color.WHITE);
|
|
graphics.fillOval(size/4, 0, size/2, size/2);
|
|
graphics.fillOval(7*size/16, 11*size/16, size/8, size/8);
|
|
|
|
graphics.setColor(Color.BLACK);
|
|
graphics.fillOval(7*size/16, 3*size/16, size/8, size/8);
|
|
// Use drawOval to draw an empty circle for the outside border
|
|
graphics.drawOval(0, 0, size-1, size-1);
|
|
|
|
// Restore the color for the caller
|
|
graphics.setColor(colorSave);
|
|
}
|
|
|
|
/**
|
|
* Create an image containing a yin yang symbol.
|
|
*/
|
|
public Image createImage(final Color bg)
|
|
{
|
|
// A BufferedImage creates the image in memory
|
|
final BufferedImage image = new BufferedImage(size, size, BufferedImage.TYPE_INT_RGB);
|
|
// Get the graphics object for the image; note in many
|
|
// applications you actually use Graphics2D for the
|
|
// additional API calls
|
|
final Graphics graphics = image.getGraphics();
|
|
// Color in the background of the image
|
|
graphics.setColor(bg);
|
|
graphics.fillRect(0,0,size,size);
|
|
drawYinYang(graphics);
|
|
return image;
|
|
}
|
|
|
|
public static void main(final String args[])
|
|
{
|
|
final int size = Integer.parseInt(args[0]);
|
|
final YinYangGenerator generator = new YinYangGenerator(size);
|
|
|
|
final JFrame frame = new JFrame("Yin Yang Generator");
|
|
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
|
final Image yinYang = generator.createImage(frame.getBackground());
|
|
// Use JLabel to display an image
|
|
frame.add(new JLabel(new ImageIcon(yinYang)));
|
|
frame.pack();
|
|
frame.setVisible(true);
|
|
}
|
|
}
|