Swing Components Java

//package mw.client.utils.gui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
@SuppressWarnings("serial")
public class ImagePanel extends JPanel {
  public static final int TILED = 0;
  public static final int SCALED = 1;
  public static final int ACTUAL = 2;
  private BufferedImage image;
  private int style;
  private float alignmentX = 0.5f;
  private float alignmentY = 0.5f;
  public ImagePanel(BufferedImage image) {
    this(image, TILED);
  }
  public ImagePanel(BufferedImage image, int style) {
    this.image = image;
    this.style = style;
    setLayout(new BorderLayout());
  }
  public void setImageAlignmentX(float alignmentX) {
    this.alignmentX = alignmentX > 1.0f ? 1.0f : alignmentX < 0.0f ? 0.0f
        : alignmentX;
  }
  public void setImageAlignmentY(float alignmentY) {
    this.alignmentY = alignmentY > 1.0f ? 1.0f : alignmentY < 0.0f ? 0.0f
        : alignmentY;
  }
  public void add(JComponent component) {
    add(component, null);
  }
  public void add(JComponent component, Object constraints) {
    component.setOpaque(false);
    if (component instanceof JScrollPane) {
      JScrollPane scrollPane = (JScrollPane) component;
      JViewport viewport = scrollPane.getViewport();
      viewport.setOpaque(false);
      Component c = viewport.getView();
      if (c instanceof JComponent) {
        ((JComponent) c).setOpaque(false);
      }
    }
    super.add(component, constraints);
  }
  protected void paintComponent(Graphics g) {
    super.paintComponent(g);
    if (image == null)
      return;
    switch (style) {
    case TILED:
      drawTiled(g);
      break;
    case SCALED:
      Dimension d = getSize();
      g.drawImage(image, 0, 0, d.width, d.height, null);
      break;
    case ACTUAL:
      drawActual(g);
      break;
    }
  }
  private void drawTiled(Graphics g) {
    Dimension d = getSize();
    int width = image.getWidth(null);
    int height = image.getHeight(null);
    for (int x = 0; x < d.width; x += width) {
      for (int y = 0; y < d.height; y += height) {
        g.drawImage(image, x, y, null, null);
      }
    }
  }
  private void drawActual(Graphics g) {
    Dimension d = getSize();
    float x = (d.width - image.getWidth()) * alignmentX;
    float y = (d.height - image.getHeight()) * alignmentY;
    g.drawImage(image, (int) x, (int) y, this);
  }
  public static void main(String[] args) throws Exception {
    BufferedImage image = javax.imageio.ImageIO.read(new java.io.File(
        "wood3.jpg"));
    //
    // ImagePanel north = new ImagePanel(image, ImagePanel.TILED);
    ImagePanel north = new ImagePanel(image, ImagePanel.ACTUAL);
    north.setImageAlignmentY(1.0f);
    JTextArea text = new JTextArea(5, 40);
    JScrollPane scrollPane = new JScrollPane(text);
    north.add(scrollPane);
    //
    ImagePanel south = new ImagePanel(image, ImagePanel.SCALED);
    JPanel buttons = new JPanel();
    buttons.add(new JButton("One"));
    buttons.add(new JButton("Two"));
    JPanel boxes = new JPanel();
    JCheckBox j = new JCheckBox("One");
    j.setOpaque(false);
    boxes.add(j);
    boxes.add(new JCheckBox("Two"));
    south.add(buttons, BorderLayout.NORTH);
    south.add(boxes, BorderLayout.SOUTH);
    //
    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(north, BorderLayout.NORTH);
    frame.getContentPane().add(south, BorderLayout.SOUTH);
    frame.pack();
    frame.setVisible(true);
  }
}