CombiningShapes.java Source code

Java tutorial

Introduction

Here is the source code for CombiningShapes.java

Source

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.geom.Area;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;

import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class CombiningShapes extends JComponent {
    private Shape mShapeOne, mShapeTwo;

    private JComboBox mOptions;

    public CombiningShapes() {
        mShapeOne = new Ellipse2D.Double(40, 20, 80, 80);
        mShapeTwo = new Rectangle2D.Double(60, 40, 80, 80);
        setBackground(Color.white);
        setLayout(new BorderLayout());

        JPanel controls = new JPanel();

        mOptions = new JComboBox(new String[] { "outline", "add", "intersection", "subtract", "exclusive or" });

        mOptions.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent ie) {
                repaint();
            }
        });
        controls.add(mOptions);
        add(controls, BorderLayout.SOUTH);
    }

    public void paintComponent(Graphics g) {
        Graphics2D g2 = (Graphics2D) g;
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);

        String option = (String) mOptions.getSelectedItem();
        if (option.equals("outline")) {
            // draw the outlines and return.
            g2.draw(mShapeOne);
            g2.draw(mShapeTwo);
            return;
        }

        // Create Areas from the shapes.
        Area areaOne = new Area(mShapeOne);
        Area areaTwo = new Area(mShapeTwo);
        // Combine the Areas according to the selected option.
        if (option.equals("add"))
            areaOne.add(areaTwo);
        else if (option.equals("intersection"))
            areaOne.intersect(areaTwo);
        else if (option.equals("subtract"))
            areaOne.subtract(areaTwo);
        else if (option.equals("exclusive or"))
            areaOne.exclusiveOr(areaTwo);

        // Fill the resulting Area.
        g2.setPaint(Color.orange);
        g2.fill(areaOne);
        // Draw the outline of the resulting Area.
        g2.setPaint(Color.black);
        g2.draw(areaOne);
    }

    public static void main(String[] args) {
        JFrame f = new JFrame();
        f.add(new CombiningShapes());
        f.setSize(220, 220);
        f.setVisible(true);
    }

}