最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
JTextArea 图片水印实现代码
时间:2011-07-21 编辑:简简单单 来源:一聚教程网
具体操作如下:
重写JViewport的paintComponent(Graphics g)方法.转Graphics为Graphics2D,使用setPaint(Paint paint)方法和fiilRect( )方法,
用TexturePaint填充JViewport,平铺水印(背景).
/**
* @param args
* 通过JScrollPane和JViewport来使JTextArea拥有背景图片,可以通过TexturePaint的平铺来完成的,
* 要想实现背景,只需要重写paintComponent(Graphics g) 的部分代码即可.
* 具体步骤: 1.先设置好texture = new TexturePaint(Image img , Rectangle rect );
* 2.重写setView(JComponent view)方法,先设视图组件的opaque(false).即设view.setOpaque(false);使视图组件不画自己背景,从而突出JViewport背景
* 2.在paintComponent(Graphics g)中使用super.paintComponent(g);
* 3.用Graphics2D来setPaint(texture);然后fillRect背景;
*/
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.MalformedURLException;
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;import mai.util.FileUtil;
public class ScrollPaneWatermark extends JViewport{
BufferedImage fgImg , bgImg;
TexturePaint texture;
//设置视图背景
public void setBackgroundTexture(URL url) throws IOException{
bgImg = ImageIO.read(url);
Rectangle rect = new Rectangle(0,0,bgImg.getWidth(),bgImg.getHeight());
texture = new TexturePaint(bgImg,rect);
}
//设置前置装饰
public void setForegroundBadge(URL url) throws IOException{
fgImg = ImageIO.read(url);
}
//用TexturePaint画组件
public void paintComponent(Graphics g){
super.paintComponent(g);
if(texture != null){
Graphics2D g2 = (Graphics2D)g;
g2.setPaint(texture);
g2.fillRect(0, 0, getWidth(), getHeight());
}
}
//先将要放进来的视图组件设置为opaque = false;
public void setView(JComponent view){
view.setOpaque(false);
super.setView(view);
}
public static void main(String[] args) throws MalformedURLException, Exception {
// TODO Auto-generated method stub
JFrame jf = new JFrame("带水印的ScrollPane");
JTextArea jta = new JTextArea();
jta.setText(FileUtil.fileToString(new File("f:/storm_log.txt").toURI().toURL()));
jta.setLineWrap(true);
jta.setWrapStyleWord(true);
ScrollPaneWatermark watermark = new ScrollPaneWatermark();
watermark.setBackgroundTexture(new File("G:/PHOTO/网页素材/背景素材/bj2.gif").toURI().toURL());
watermark.setView(jta);
JScrollPane jsp教程 = new JScrollPane();
jsp.setViewport(watermark);
jf.getContentPane().add(jsp);
jf.pack();
jf.setVisible(true);
}}
刚开始想到直接重写JTextArea的paintComponent(Graphics g)方法,将图片直接drawImage上去.后来发现效果不太好.
2.后来发现,基本上JTextArea都会先放进JScrollPane,之后再呈现出来.而JScrollPane是通过呈现视窗Viewport来展示滚动区的.
所以这里我们可以通过重写JViewport,以达到视窗部分带背景的效果.
相关文章
- Photoshop怎么为图片批量添加水印 添加方法 05-02
- Word2016添加图片作背景水印 04-11
- ps如何清除图片上的水印?清除图片水印教程 01-03
- Photoshop一些给图片加水印的方法分享 05-15
- 可牛影像怎么去水印?可牛影像去图片水印教程 09-17
- java给图片加水印效果代码 04-04