package graphtest; import javax.swing.*; import java.awt.*; import java.awt.geom.*; public class Panel extends JPanel { @Override // переозначення методу малювання public void paintComponent (Graphics g) { super.paintComponent(g); g.setColor(Color.yellow); Graphics2D g2 = (Graphics2D) g; BasicStroke pen = new BasicStroke(3, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND); g2.setStroke (pen); Shape s1 = new Line2D.Float(140,10,140,70); // вертикальний відрізок Shape s2 = new Ellipse2D.Float(10,10,90,60);// еліпс GeneralPath t = new GeneralPath(s1); t.append(s2,true); // поєднання еліпса й вертикального відрізка g2.draw(t); s1 = new Line2D.Float(170,10,200,10); // горизонтальний відрізок s2 = new Line2D.Float(170,70,200,70); // горизонтальний відрізок t = new GeneralPath(s1); t.append(s2,true); // поєднання горизонтальних відрізків зі сполученням g2.draw(t); t = new GeneralPath(GeneralPath.WIND_NON_ZERO);// ламана з самоперетином t.moveTo (220, 10); t.lineTo (280, 10); t.lineTo (280, 85); t.lineTo (265, 85); t.lineTo (265, 25); t.lineTo (235, 25); t.lineTo (235, 55); t.lineTo (295, 55); t.lineTo (295, 70); t.lineTo (220, 70); t.lineTo (220, 10); t.closePath(); g2.draw(t); t = new GeneralPath(GeneralPath.WIND_EVEN_ODD);// ламана з самоперетином t.moveTo (310, 10); t.lineTo (370, 10); t.lineTo (370, 85); t.lineTo (355, 85); t.lineTo (355, 25); t.lineTo (325, 25); t.lineTo (325, 55); t.lineTo (385, 55); t.lineTo (385, 70); t.lineTo (310, 70); t.lineTo (310, 10); t.closePath(); g2.draw(t); // Другий ряд фігур отримано з першого збільшенням ординати на 100 і // заміною креслення контуру методом draw заповненням методом fill s1 = new Line2D.Float(140,110,140,170); // вертикальний відрізок s2 = new Ellipse2D.Float(10,110,90,60); // еліпс t = new GeneralPath(s1); t.append(s2,true); // поєднання еліпса й вертикального відрізка g2.fill(t); s1 = new Line2D.Float(170,110,200,110); // горизонтальний відрізок s2 = new Line2D.Float(170,170,200,170); // горизонтальний відрізок t = new GeneralPath(s1); t.append(s2,true); // поєднання горизонтальних відрізків зі сполученням g2.fill(t); t = new GeneralPath(GeneralPath.WIND_NON_ZERO);// ламана з самоперетином t.moveTo (220, 110); t.lineTo (280, 110); t.lineTo (280, 185); t.lineTo (265, 185); t.lineTo (265, 125); t.lineTo (235, 125); t.lineTo (235, 155); t.lineTo (295, 155); t.lineTo (295, 170); t.lineTo (220, 170); t.lineTo (220, 110); t.closePath(); g2.fill(t); t = new GeneralPath(GeneralPath.WIND_EVEN_ODD);// ламана з самоперетином t.moveTo (310, 110); t.lineTo (370, 110); t.lineTo (370, 185); t.lineTo (355, 185); t.lineTo (355, 125); t.lineTo (325, 125); t.lineTo (325, 155); t.lineTo (385, 155); t.lineTo (385, 170); t.lineTo (310, 170); t.lineTo (310, 110); t.closePath(); g2.fill(t); t = new GeneralPath(GeneralPath.WIND_EVEN_ODD); t.moveTo (10, 250); t.quadTo (40, 200, 190, 250); // квадратична крива t.curveTo(210, 350, 350, 340, 370, 250);// кубічна крива t.closePath(); g2.fill(t); } }