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