Swing JFC Java

/*
Swing Hacks Tips and Tools for Killer GUIs
By Joshua Marinacci, Chris Adamson
First Edition June 2005  
Series: Hacks
ISBN: 0-596-00907-0
Pages: 542
website: http://www.oreilly.com/catalog/swinghks/
*/
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.TexturePaint;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JViewport;
public class ScrollPaneWatermark extends JViewport {
  BufferedImage fgimage, bgimage;
  TexturePaint texture;
  public ScrollPaneWatermark() {
    super();
    // setOpaque(false);
  }
  public void setBackgroundTexture(URL url) throws IOException {
    bgimage = ImageIO.read(url);
    Rectangle rect = new Rectangle(0, 0, bgimage.getWidth(null), bgimage.getHeight(null));
    texture = new TexturePaint(bgimage, rect);
  }
  public void setForegroundBadge(URL url) throws IOException {
    fgimage = ImageIO.read(url);
  }
  public void paintComponent(Graphics g) {
    // do the superclass behavior first
    super.paintComponent(g);
    // paint the texture
    if (texture != null) {
      Graphics2D g2 = (Graphics2D) g;
      g2.setPaint(texture);
      g.fillRect(0, 0, getWidth(), getHeight());
    }
  }
  public void paintChildren(Graphics g) {
    super.paintChildren(g);
    if (fgimage != null) {
      g.drawImage(fgimage, getWidth() - fgimage.getWidth(null), 0, null);
    }
  }
  public void setView(JComponent view) {
    view.setOpaque(false);
    super.setView(view);
  }
  public static void main(String[] args) throws Exception {
    JFrame frame = new JFrame();
    JTextArea ta = new JTextArea();
    for (int i = 0; i < 1000; i++) {
      ta.append(Integer.toString(i) + "  ");
    }
    ta.setLineWrap(true);
    ta.setWrapStyleWord(true);
    // ta.setOpaque(false);
    ScrollPaneWatermark watermark = new ScrollPaneWatermark();
    watermark.setBackgroundTexture(new File("background.jpg").toURL());
    watermark.setForegroundBadge(new File("foreground.png").toURL());
    watermark.setView(ta);
    JScrollPane scroll = new JScrollPane();
    scroll.setViewport(watermark);
    frame.getContentPane().add(scroll);
    frame.pack();
    frame.setSize(600, 600);
    frame.setVisible(true);
  }
}