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