Composite demo : Composite « 2D Graphics GUI « Java






Composite demo

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


           
         
    
  








Related examples in the same category

1.AlphaComposite AlphaComposite
2.AlphaComposite.DST
3.AlphaComposite.DST_ATOP
4.AlphaComposite.DST_OUT
5.AlphaComposite.SRC
6.AlphaComposite.SRC_ATOP
7.AlphaComposite.SRC_OUT
8.Composite EffectsComposite Effects
9.Blend Composite DemoBlend Composite Demo
10.This program demonstrates the Porter-Duff composition rulesThis program demonstrates the Porter-Duff composition rules