Java tutorial
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.geom.Ellipse2D; import java.awt.geom.Rectangle2D; import java.awt.image.BufferedImage; import javax.swing.JApplet; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; public class Composite extends JApplet implements ItemListener { CompPanel comp; JLabel alphaLabel = new JLabel("Alphas"); JLabel rulesLabel = new JLabel("Rules"); JComboBox alphas = new JComboBox(); JComboBox rules = new JComboBox(); String alpha = "1.0"; int rule = 0; public void init() { getContentPane().setLayout(new FlowLayout()); getContentPane().add(alphaLabel); getContentPane().add(rulesLabel); alphas.addItem("1.0"); alphas.addItem("0.75"); alphas.addItem("0.50"); alphas.addItem("0.25"); alphas.addItem("0.0"); alphas.addItemListener(this); getContentPane().add(alphas); rules.addItem("SRC"); rules.addItem("DST_IN"); rules.addItem("DST_OUT"); rules.addItem("DST_OVER"); rules.addItem("SRC_IN"); rules.addItem("SRC_OVER"); rules.addItem("SRC_OUT"); rules.addItem("CLEAR"); rules.addItemListener(this); getContentPane().add(rules); comp = new CompPanel(); getContentPane().add(comp); validate(); } public void itemStateChanged(ItemEvent e) { if (e.getStateChange() != ItemEvent.SELECTED) { return; } Object choice = e.getSource(); if (choice == alphas) { alpha = (String) alphas.getSelectedItem(); } else { rule = rules.getSelectedIndex(); } comp.changeRule(alpha, rule); } public static void main(String s[]) { JFrame f = new JFrame("Composite"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); JApplet applet = new Composite(); f.getContentPane().add("Center", applet); applet.init(); f.pack(); f.setSize(new Dimension(300, 300)); f.show(); } } class CompPanel extends JPanel { AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.SRC); float alpha = 1.0f; public CompPanel() { setPreferredSize(new Dimension(250, 250)); } public void changeRule(String a, int rule) { alpha = Float.valueOf(a).floatValue(); ac = AlphaComposite.getInstance(getRule(rule), alpha); repaint(); } public int getRule(int rule) { int alphaComp = 0; switch (rule) { case 0: alphaComp = AlphaComposite.SRC; break; case 1: alphaComp = AlphaComposite.DST_IN; break; case 2: alphaComp = AlphaComposite.DST_OUT; break; case 3: alphaComp = AlphaComposite.DST_OVER; break; case 4: alphaComp = AlphaComposite.SRC_IN; break; case 5: alphaComp = AlphaComposite.SRC_OVER; break; case 6: alphaComp = AlphaComposite.SRC_OUT; break; case 7: alphaComp = AlphaComposite.CLEAR; break; } return alphaComp; } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; Dimension d = getSize(); int w = d.width; int h = d.height; BufferedImage buffImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB); Graphics2D gbi = buffImg.createGraphics(); g2.setColor(Color.white); g2.fillRect(0, 0, d.width, d.height); int rectx = w / 4; int recty = h / 4; gbi.setColor(new Color(0.0f, 0.0f, 1.0f, 1.0f)); gbi.fill(new Rectangle2D.Double(rectx, recty, 150, 100)); gbi.setColor(new Color(1.0f, 0.0f, 0.0f, 1.0f)); gbi.setComposite(ac); gbi.fill(new Ellipse2D.Double(rectx + rectx / 2, recty + recty / 2, 150, 100)); g2.drawImage(buffImg, null, 0, 0); } }