
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
Rys. 150. Symbol Jin Jang