Java tutorial
import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.Area; import java.awt.geom.Ellipse2D; import java.awt.geom.GeneralPath; import javax.swing.ButtonGroup; import javax.swing.JApplet; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.border.TitledBorder; public class TArea extends JApplet implements ActionListener { DrawingCanvas canvas; JRadioButton addButton, subtractButton, intersectButton, exclusiveORButton, resetButton; public static void main(String[] a) { JFrame f = new JFrame(); TArea area = new TArea(); area.init(); f.getContentPane().add(area); f.setDefaultCloseOperation(1); f.setSize(650, 450); f.setVisible(true); } public void init() { Container container = getContentPane(); JPanel panel = new JPanel(); panel.setLayout(new GridLayout(2, 2)); resetButton = new JRadioButton("Reset", true); addButton = new JRadioButton("Add"); subtractButton = new JRadioButton("Subtract"); intersectButton = new JRadioButton("Intersect"); exclusiveORButton = new JRadioButton("ExclusiveOR"); ButtonGroup group = new ButtonGroup(); group.add(resetButton); group.add(addButton); group.add(subtractButton); group.add(intersectButton); group.add(exclusiveORButton); group.add(resetButton); resetButton.addActionListener(this); addButton.addActionListener(this); subtractButton.addActionListener(this); intersectButton.addActionListener(this); exclusiveORButton.addActionListener(this); panel.add(addButton); panel.add(subtractButton); panel.add(intersectButton); panel.add(exclusiveORButton); container.add(panel, BorderLayout.NORTH); container.add(resetButton, BorderLayout.SOUTH); canvas = new DrawingCanvas(); container.add(canvas); } class DrawingCanvas extends Canvas { GeneralPath gp; Ellipse2D ellipse; Area area1, area2; boolean drawFlag = true; boolean fillFlag = false; public DrawingCanvas() { setBackground(Color.white); setSize(350, 250); int w = getWidth(); int h = getHeight(); gp = new GeneralPath(); gp.moveTo(w / 8, h / 2); gp.lineTo(w / 2, h / 4); gp.lineTo(7 * w / 8, h / 2); gp.lineTo(w / 2, 3 * h / 4); gp.closePath(); area1 = new Area(gp); ellipse = new Ellipse2D.Double(w / 4, h / 4, w / 2, h / 2); area2 = new Area(ellipse); // Ellipse area object } public void paint(Graphics g) { Graphics2D g2D = (Graphics2D) g; g2D.setStroke(new BasicStroke(2.0f)); if (drawFlag) { g2D.draw(area1); g2D.draw(area2); } if (fillFlag) g2D.fill(area1); } } public void actionPerformed(ActionEvent e) { JRadioButton temp = (JRadioButton) e.getSource(); if (temp.equals(addButton)) { canvas.area1 = new Area(canvas.gp); canvas.area1.add(canvas.area2); canvas.drawFlag = false; canvas.fillFlag = true; canvas.repaint(); } else if (temp.equals(subtractButton)) { canvas.area1 = new Area(canvas.gp); canvas.area1.subtract(canvas.area2); canvas.drawFlag = false; canvas.fillFlag = true; canvas.repaint(); } else if (temp.equals(intersectButton)) { canvas.area1 = new Area(canvas.gp); canvas.area1.intersect(canvas.area2); canvas.drawFlag = false; canvas.fillFlag = true; canvas.repaint(); } else if (temp.equals(exclusiveORButton)) { canvas.area1 = new Area(canvas.gp); canvas.area1.exclusiveOr(canvas.area2); canvas.drawFlag = false; canvas.fillFlag = true; canvas.repaint(); } else if (temp.equals(resetButton)) { if (canvas.drawFlag == false) { canvas.area1 = new Area(canvas.gp); canvas.drawFlag = true; canvas.fillFlag = false; canvas.repaint(); } } } }