import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.GradientPaint; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GridLayout; import java.awt.Image; import java.awt.RenderingHints; import java.awt.geom.Point2D; import java.awt.image.BufferedImage; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.SwingUtilities; public class AlphaCompositing extends JFrame { public AlphaCompositing() { super("Alpha Compositing"); getContentPane().setLayout(new GridLayout(5, 1)); add(new BaseImage()); add(new NotAntialiased()); add(new Dimmed()); add(new Background()); add(new Fading()); pack(); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } static { // turn off Mac's default antialiasing, so that // we can see what unantialiased text looks like System.setProperty("com.apple.macosx.AntiAliasedTextOn", "false"); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run () { new AlphaCompositing().setVisible(true); } }); } private class BaseImage extends JComponent { public BaseImage() { this.setPreferredSize(new Dimension(600, 140)); } @Override protected void paintComponent(Graphics g) { // make an offscreen image buffer with an alpha channel, // since the normal drawing surface doesn't have one. // (ABGR means alpha-blue-green-red, PRE means the colors are // premultiplied by alpha) Image buffer = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_4BYTE_ABGR_PRE); // paint to this offscreen image Graphics2D g2d = (Graphics2D)buffer.getGraphics(); enableAntialiasing(g2d); paintTextAndGraphics(g2d); paintEffect(g2d); // now paint the offscreen image onscreen g.drawImage(buffer, 0, 0, null); } protected void enableAntialiasing(Graphics2D g2d) { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); } protected void paintTextAndGraphics(Graphics2D g2d) { g2d.setFont(new Font("Helvetica", Font.ITALIC, 110)); g2d.setColor(Color.blue); g2d.drawString("graphics", 100, 100); } protected void paintEffect(Graphics2D g2d) { } } public class NotAntialiased extends BaseImage { @Override protected void enableAntialiasing(Graphics2D g2d) { } } public class Dimmed extends BaseImage { @Override protected void paintEffect(Graphics2D g2d) { //g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.???)); g2d.setPaint(new Color(1f, 1f, 1f, 0.8f)); g2d.fillRect(0, 0, getWidth(), getHeight()); } } public class Background extends BaseImage { @Override protected void paintEffect(Graphics2D g2d) { //g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.???)); g2d.setPaint(new Color(0.5f, 0.5f, 0.9f)); g2d.fillRect(0, 0, getWidth(), getHeight()); } } public class Fading extends BaseImage { @Override protected void paintEffect(Graphics2D g2d) { //g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.???)); g2d.setPaint(new GradientPaint(new Point2D.Float(0, 0), new Color(0f,0f,0f,1f), new Point2D.Float(0, getHeight()), new Color(0f,0f,0f,0f))); g2d.fillRect(0, 0, getWidth(), getHeight()); } } }