Java tutorial
/* 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); } }