?? compositetest.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 + -