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