1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
package test;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.LinearGradientPaint;
import java.awt.RenderingHints;
import java.awt.geom.AffineTransform;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
/**
*/
public class TestTransform extends JPanel {
public enum Transform {
NONE, ROTATE, ROTATE_FLIP;
public AffineTransform getTranform(float cx, float cy) {
AffineTransform result = null;
switch (this) {
case ROTATE_FLIP:
result = AffineTransform.getRotateInstance(Math.PI / 2.0, cx, cy);
result.concatenate(AffineTransform.getScaleInstance(1, -1));
break;
case ROTATE:
result = AffineTransform.getRotateInstance(Math.PI / 2.0, cx, cy);
break;
case NONE:
default:
result = new AffineTransform();
}
return result;
}
}
private Transform transform = Transform.NONE;
private float width = 150;
private float height = 100;
private Rectangle2D.Float rect = new Rectangle2D.Float(0, 0, width, height);
private float cx = width / 2f;
private float cy = height / 2f;
private float radius = 5;
private Ellipse2D.Float center = new Ellipse2D.Float(cx - radius, cy - radius, 2 * radius, 2 * radius);
private LinearGradientPaint paint = new LinearGradientPaint(0, 0, width, height, new float[]{0, 0.5f, 1}, new Color[]{Color.ORANGE, Color.BLUE, Color.GREEN});
public TestTransform(Transform t) {
if (t != null) {
transform = t;
}
setPreferredSize(new Dimension(400, 350));
}
/**
* {@inheritDoc}
*/
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
Dimension size = getSize();
Graphics2D g2d = (Graphics2D) graphics.create();
try {
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
///////////////////////
g2d.translate(100, 100);
g2d.setColor(Color.MAGENTA);
g2d.drawLine(0, 0, 100, 0);
g2d.drawLine(0, 0, 0, 100);
/////////////////////////////////////////////////
AffineTransform t = transform.getTranform(cx, cy);
g2d.transform(t);
g2d.setPaint(paint);
g2d.fill(rect);
g2d.setPaint(Color.BLACK);
g2d.draw(rect);
g2d.setPaint(Color.GREEN);
g2d.fill(center);
g2d.setPaint(Color.ORANGE);
g2d.draw(center);
g2d.setColor(Color.RED);
g2d.drawLine(0, 0, 100, 0);
g2d.drawLine(0, 0, 0, 100);
g2d.drawString("X", 100, -20);
g2d.drawString("Y", -20, 100);
} finally {
g2d.dispose();
}
graphics.setColor(Color.BLACK);
graphics.drawRect(0, 0, size.width - 1, size.height - 1);
//
graphics.setXORMode(Color.WHITE);
graphics.drawString(transform.toString(), 50, 50);
graphics.setPaintMode();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable() {
public void run() {
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new TestTransform(Transform.NONE));
frame.add(new TestTransform(Transform.ROTATE));
frame.add(new TestTransform(Transform.ROTATE_FLIP));
frame.pack();
frame.setVisible(true);
}
});
}
} |
Partager