Java tutorial
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); } } }