Zielony Smok - logo witryny

Jak narysować symbol Jin Jang (Yin Yang)?

Klasy

Klasa JinJang
package jinjang;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
public class JinJang extends JPanel {
    private static final long serialVersionUID = -3120426206998247799L;
    private final double rozmiar;
    private final double odstep;
    private final Color color1;
    private final Color color2;
    /**
     * Tworzy obiekt typu JinJang
     *
     * @param rozmiar double - srednica figury
     * @param odstep  double - odległość figury od lewego i górnego
     *                brzegu komponentu
     * @param color1  Color - kolor lewej strony. Jeśli nie jest podany
     *                to kolot jest biały
     * @param color2  Color - color prawej strony. Jeśli jest nie podany to kolor
     *                jest czarny;
     */
    public JinJang(double rozmiar, double odstep, Color color1, Color color2) {
        this.rozmiar = rozmiar;
        this.odstep = odstep;
        if (color1 == null) {
            this.color1 = Color.WHITE;
        } else {
            this.color1 = color1;
        }
        if (color2 == null) {
            this.color2 = Color.BLACK;
        } else {
            this.color2 = color2;
        }
        this.setBounds(0, 0, (int) rozmiar + (int) odstep, (int) rozmiar
                + (int) odstep);
    }
    @Override
    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);
        // -
        Arc2D.Double polkoleLewe = new Arc2D.Double(odstep + 1.0, odstep + 1.0,
                rozmiar - 2.0, rozmiar - 2.0, 90, 180, Arc2D.OPEN);
        g2.setColor(color1);
        g2.fill(polkoleLewe);
        //
        Arc2D.Double polkolePrawe = new Arc2D.Double(odstep + 1.0,
                odstep + 1.0, rozmiar, rozmiar, -90, 180, Arc2D.OPEN);
        g2.setColor(color2);
        g2.fill(polkolePrawe);
        // -
        Ellipse2D.Double koloGorne = new Ellipse2D.Double(rozmiar / 4.0
                + odstep, odstep, rozmiar / 2.0, rozmiar / 2.0);
        g2.setColor(color1);
        g2.fill(koloGorne);
        // -
        Ellipse2D.Double koloDolne = new Ellipse2D.Double(rozmiar / 4.0
                + odstep, rozmiar / 2.0 + odstep, rozmiar / 2.0, rozmiar / 2.0);
        g2.setColor(color2);
        g2.fill(koloDolne);
        // -
        Ellipse2D.Double kolkoGorne = new Ellipse2D.Double(rozmiar / 2.0
                + odstep, rozmiar / 4.0 + odstep, rozmiar / 20.0,
                rozmiar / 20.0);
        g2.setColor(color2);
        g2.fill(kolkoGorne);
        // -
        // -
        Ellipse2D.Double kolkoDolne = new Ellipse2D.Double(rozmiar / 2.0
                + odstep, rozmiar / 2.0 + rozmiar / 4.0 + odstep,
                rozmiar / 20.0, rozmiar / 20.0);
        g2.setColor(color1);
        g2.fill(kolkoDolne);
        // -
        Ellipse2D.Double obwodka = new Ellipse2D.Double(odstep, odstep,
                rozmiar, rozmiar);
        g2.setColor(color2);
        g2.draw(obwodka);
    }
}
Klasa Main
package jinjang;
import java.awt.*;
import javax.swing.*;
public class Main extends JFrame {
    private static final long serialVersionUID = 1L;
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> new Main(new JinJang(200, 140, Color.WHITE, Color.BLACK)));
    }
    public Main(JComponent comp) {
        JPanel panel = (JPanel) comp;
        panel.setLayout(null);
        int frameHeight = 500;
        int frameWidth = 500;
        panel.setBounds(0, 0, frameWidth, frameHeight);
        setLayout(null);
        setPreferredSize(new Dimension(500, 300));
        setBounds((Toolkit.getDefaultToolkit().getScreenSize().width / 2)
                        - (frameWidth / 2), (Toolkit.getDefaultToolkit()
                        .getScreenSize().height / 2) - (frameHeight / 2), frameWidth,
                frameHeight);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setTitle("Ramka Graficzna");
        add(panel);
        setVisible(true);
    }
}

Wynik

Jin Jang w języku Java
Rys. 150. Symbol Jin Jang