2D Graphics GUI Java

import java.awt.AlphaComposite;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
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.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class AlphaCompositeDemo extends JFrame {
  MyCanvas canvas;
  JSlider slider = new JSlider(JSlider.HORIZONTAL, 0, 100, 5);
  JComboBox rulesBox;
  String[] rulesLabels = { "Clear", "Source", "Source-over",
      "Destination-over", "Source-in", "Destination-in", "Source-out",
      "Destination-out" };
  int[] rules = { AlphaComposite.CLEAR, AlphaComposite.SRC,
      AlphaComposite.SRC_OVER, AlphaComposite.DST_OVER,
      AlphaComposite.SRC_IN, AlphaComposite.DST_IN,
      AlphaComposite.SRC_OUT, AlphaComposite.DST_OUT };
  public AlphaCompositeDemo() {
    super();
    Container container = getContentPane();
    canvas = new MyCanvas();
    container.add(canvas);
    rulesBox = new JComboBox(rulesLabels);
    rulesBox.setSelectedIndex(0);
    rulesBox.setAlignmentX(Component.LEFT_ALIGNMENT);
    rulesBox.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        JComboBox cb = (JComboBox) e.getSource();
        canvas.compositeRule = rules[cb.getSelectedIndex()];
        canvas.repaint();
      }
    });
    slider.setPaintTicks(true);
    slider.setMajorTickSpacing(25);
    slider.setMinorTickSpacing(25);
    slider.setPaintLabels(true);
    slider.addChangeListener(new ChangeListener() {
      public void stateChanged(ChangeEvent e) {
        JSlider slider = (JSlider) e.getSource();
        canvas.alphaValue = (float) slider.getValue() / 100;
        canvas.repaint();
      }
    });
    
    
    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(1, 3));
    panel.add(rulesBox);
    panel.add(new JLabel("Alpha Adjustment x E-2: ", JLabel.RIGHT));
    panel.add(slider);
    container.add(panel, BorderLayout.SOUTH);
    addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent e) {
        System.exit(0);
      }
    });
    setSize(500,300);
    setVisible(true);
  }
  public static void main(String arg[]) {
    new AlphaCompositeDemo();
  }
  class MyCanvas extends JLabel {
    float alphaValue = 1.0f;
    int compositeRule = AlphaComposite.CLEAR;
    AlphaComposite ac;
    public void paint(Graphics g) {
      Graphics2D g2D = (Graphics2D) g;
      int w = getSize().width;
      int h = getSize().height;
      BufferedImage bi = new BufferedImage(w, h,
          BufferedImage.TYPE_INT_ARGB);
      Graphics2D big = bi.createGraphics();
      ac = AlphaComposite.getInstance(compositeRule, alphaValue);
      big.setColor(Color.red);
      big.drawString("Destination", w / 4, h / 4);
      big.fill(new Ellipse2D.Double(0, h / 3, 2 * w / 3, h / 3));
      big.setColor(Color.blue);
      big.drawString("Source", 3 * w / 4, h / 4);
      big.setComposite(ac);
      big.fill(new Ellipse2D.Double(w / 3, h / 3, 2 * w / 3, h / 3));
      g2D.drawImage(bi, null, 0, 0);
    }
  }
}