import java.awt.*;
import java.awt.geom.Ellipse2D;

import javax.swing.*;


/**
 * @author Remi Forax
 *
 */
public class Graphics2DExample extends JComponent {

  protected void paintComponent(Graphics graphics) {
    super.paintComponent(graphics);
    
    Graphics2D g=(Graphics2D)graphics;
    
    g.setRenderingHint(
      RenderingHints.KEY_ANTIALIASING,
      RenderingHints.VALUE_ANTIALIAS_ON);
    
    g.rotate(-0.1);
    
    g.drawImage(image, 120, 50, this);
    
    g.setColor(Color.RED);
    g.fillRect(12,12,150,150);
    
    g.setPaint(new GradientPaint(24,24,Color.BLUE,100,100,Color.WHITE));
    g.fill(ellipse);
    
    g.setColor(Color.BLACK);
    g.setStroke(new BasicStroke(3));
    
    g.drawLine(34,34,154,112);
    
    g.setFont(font);
    g.drawString("Example",12,32);
  }
  
  private final Shape ellipse=new Ellipse2D.Float(24, 24, 100, 100);
  
  private final Font font=new Font("SansSerif",Font.BOLD,20);
  private final Image image=new ImageIcon("moon.jpg").getImage();

  public static void main(String[] args) {
    
    JFrame frame=new JFrame("Graphics2DExample");
    Graphics2DExample component=new Graphics2DExample();
    
    frame.getContentPane().add(component);
    frame.setSize(400,300);
    frame.show();
  }
}
