import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionListener;

import javax.swing.*;


/**
 * @author Remi Forax
 *
 */
public class MoonExample extends JComponent {

  protected void paintComponent(Graphics graphics) {
    super.paintComponent(graphics);
    
    Graphics2D g=(Graphics2D)graphics;
    
    if (interpolation) {
      g.setRenderingHint(
        RenderingHints.KEY_INTERPOLATION,
        RenderingHints.VALUE_INTERPOLATION_BICUBIC);  
    }
    
    g.drawImage(image, 0, 0, getWidth(), getHeight(), this);
  }
  
  public Dimension getPreferredSize() {
    return new Dimension(
      image.getWidth(this),
      image.getHeight(this));
  }

  public void setInterpolation(boolean interpolation) {
    this.interpolation=interpolation;
    paintImmediately(0,0,getWidth(),getHeight());
  }
  
  private boolean interpolation;
  
  private final Image image=new ImageIcon("moon.jpg").getImage();

  public static void main(String[] args) {
    
    Toolkit.getDefaultToolkit().setDynamicLayout(true);
    
    JFrame frame=new JFrame("MoonExample");
    final MoonExample component=new MoonExample();
    
    final JCheckBox button=new JCheckBox("interpolation");
    button.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        component.setInterpolation(button.isSelected());
      }
    });
    
    frame.getContentPane().add(component);
    frame.getContentPane().add(button,BorderLayout.SOUTH);
    frame.pack();
    frame.show();
  }
}
