⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 compositetest.java

📁 sun公司开发的,java2核心技术,卷II:高级性能,包括一系列的高级java应用技术,如数据库德连接,高级swing,多线程,软件本地化等等,本文件中则包含该书中的所用实例,配合该书使用,使对ja
💻 JAVA
字号:
/**
 * @version 1.00 1999-09-11
 * @author Cay Horstmann
 */

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.geom.*;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;

public class CompositeTest
{  public static void main(String[] args)
   {  JFrame frame = new CompositeTestFrame();
      frame.show();
   }
}

class CompositeTestFrame extends JFrame
   implements ActionListener, ChangeListener
{  public CompositeTestFrame()
   {  setTitle("CompositeTest");
      setSize(400, 400);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      Container contentPane = getContentPane();
      canvas = new CompositePanel();
      contentPane.add(canvas, "Center");

      ruleCombo = new JComboBox();
      ruleCombo.addItem("CLEAR");
      ruleCombo.addItem("SRC");
      ruleCombo.addItem("SRC_OVER");
      ruleCombo.addItem("DST_OVER");
      ruleCombo.addItem("SRC_IN");
      ruleCombo.addItem("SRC_OUT");
      ruleCombo.addItem("DST_IN");
      ruleCombo.addItem("DST_OUT");
      ruleCombo.addActionListener(this);

      alphaSlider = new JSlider();
      alphaSlider.addChangeListener(this);
      JPanel panel = new JPanel();
      panel.add(ruleCombo);
      panel.add(new JLabel("Alpha"));
      panel.add(alphaSlider);
      contentPane.add(panel, "North");

      explanation = new JTextField();
      contentPane.add(explanation, "South");

      canvas.setAlpha(alphaSlider.getValue());
      canvas.setRule(ruleCombo.getSelectedItem());
      explanation.setText(canvas.getExplanation());
   }

   public void stateChanged(ChangeEvent event)
   {  canvas.setAlpha(alphaSlider.getValue());
   }

   public void actionPerformed(ActionEvent event)
   {  canvas.setRule(ruleCombo.getSelectedItem());
      explanation.setText(canvas.getExplanation());
   }

   private CompositePanel canvas;
   private JComboBox ruleCombo;
   private JSlider alphaSlider;
   private JTextField explanation;
}

class CompositePanel extends JPanel
{  public CompositePanel()
   {  shape1 = new Ellipse2D.Double(100, 100, 150, 100);
      shape2 = new Rectangle2D.Double(150, 150, 150, 100);
   }

   public void paintComponent(Graphics g)
   {  super.paintComponent(g);
      Graphics2D g2 = (Graphics2D)g;

      BufferedImage image = new BufferedImage(getWidth(),
         getHeight(), BufferedImage.TYPE_INT_ARGB);
      Graphics2D gImage = image.createGraphics();
      gImage.setPaint(Color.red);
      gImage.fill(shape1);
      AlphaComposite composite
         = AlphaComposite.getInstance(rule, alpha);
      gImage.setComposite(composite);
      gImage.setPaint(Color.blue);
      gImage.fill(shape2);
      g2.drawImage(image, null, 0, 0);
   }

   public void setRule(Object r)
   {  if (r.equals("CLEAR"))
      {  rule = AlphaComposite.CLEAR;
         porterDuff1 = "  ";
         porterDuff2 = "  ";
      }
      else if (r.equals("SRC"))
      {  rule = AlphaComposite.SRC;
         porterDuff1 = " S";
         porterDuff2 = " S";
      }
      else if (r.equals("SRC_OVER"))
      {  rule = AlphaComposite.SRC_OVER;
         porterDuff1 = " S";
         porterDuff2 = "DS";
      }
      else if (r.equals("DST_OVER"))
      {  rule = AlphaComposite.DST_OVER;
         porterDuff1 = " S";
         porterDuff2 = "DD";
      }
      else if (r.equals("SRC_IN"))
      {  rule = AlphaComposite.SRC_IN;
         porterDuff1 = "  ";
         porterDuff2 = " S";
      }
      else if (r.equals("SRC_OUT"))
      {  rule = AlphaComposite.SRC_OUT;
         porterDuff1 = " S";
         porterDuff2 = "  ";
      }
      else if (r.equals("DST_IN"))
      {  rule = AlphaComposite.DST_IN;
         porterDuff1 = "  ";
         porterDuff2 = " D";
      }
      else if (r.equals("DST_OUT"))
      {  rule = AlphaComposite.DST_OUT;
         porterDuff1 = "  ";
         porterDuff2 = "D ";
      }
      repaint();
   }

   public void setAlpha(int a)
   {  alpha = (float)a / 100.0F;
      repaint();
   }

   public String getExplanation()
   {  String r = "Source ";
      if (porterDuff2.equals("  "))
         r += "clears";
      if (porterDuff2.equals(" S"))
         r += "overwrites";
      if (porterDuff2.equals("DS"))
         r += "blends with";
      if (porterDuff2.equals(" D"))
         r += "alpha modifies";
      if (porterDuff2.equals("D "))
         r += "alpha complement modifies";
      if (!porterDuff2.equals("DD"))
      {  r += " destination";
         if (!porterDuff1.equals("  ")) r += " and ";
      }
      if (porterDuff1.equals(" S"))
         r += "overwrites";
      if (!porterDuff1.equals("  "))
         r += " empty pixels";
      return r + ".";
   }

   private Shape shape1;
   private Shape shape2;
   private float alpha;
   private int rule;
   private String porterDuff1; // row 1 of the rule diagram
   private String porterDuff2; // row 2 of the rule diagram
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -