可设置背景的JPanel
程序员文章站
2022-03-29 10:09:24
...
在做一款小工具时遇到了需要给JPanel设置背景图片的功能需求,在网上搜索相关资料加入了自己需要的平铺功能后整理了一下,代码如下:
package com.cntrust.file; import java.awt.Graphics; import javax.swing.ImageIcon; import javax.swing.JPanel; /** * * 绘制背景的JPanel * * @author niqy@qq.com * * @date 2015-1-15 下午04:32:16 * */ public class BackgroundImagePanel extends JPanel { private static final long serialVersionUID = 1L; /** * 平铺方式 */ public static enum Repeat { // 平铺 Repeat, // X轴平铺 Repeat_X, // Y轴平铺 Repeat_Y, // 不平铺 NO } // 背景图片 private ImageIcon backgroundImage; // 背景图片平铺方式 private Repeat repeat = Repeat.Repeat; // 背景图片X轴平铺的起始位置 private int position_x = 0; // 背景图片Y轴平铺的起始位置 private int position_y = 0; /** * 设置背景图片 * * @param backgroundImage */ public void setBackgroundImage(ImageIcon backgroundImage) { this.backgroundImage = backgroundImage; } /** * 设置背景平铺方式 * * @param repeat */ public void setBackgroundRepeat(Repeat repeat) { this.repeat = repeat; } /** * 设置背景平铺的位置 * * @param x * @param y */ public void setBackgroundPosition(int x, int y) { this.position_x = x; this.position_y = x; } public void setBackgroundPositionX(int x) { this.position_x = x; } public void setBackgroundPositionY(int y) { this.position_y = y; } // 重写的绘图函数,绘制平铺图片 @Override public void paintComponent(Graphics g) { super.paintComponent(g); // 如果未设置背景图片则不进行绘制 if (this.backgroundImage == null) { return; } // 每一副图像的位置坐标 int x = this.position_x; int y = this.position_y; // 平铺背景图片 while (true) { // 绘制图片 g.drawImage(this.backgroundImage.getImage(), x, y, this); if (this.repeat == Repeat.NO) { break; } // 如果绘制完毕,退出循环 if (x > this.getSize().width && y > this.getSize().height) { break; } if (this.repeat == Repeat.Repeat_X) { if (x <= this.getSize().width) { x += this.backgroundImage.getIconWidth(); } else { break; } } else if (this.repeat == Repeat.Repeat_Y) { if (y <= this.getSize().height) { y += this.backgroundImage.getIconHeight(); } else { break; } } else if (this.repeat == Repeat.Repeat) { // 如果绘完一行,换行绘制 if (x > this.getSize().width) { x = this.position_x; y += this.backgroundImage.getIconHeight(); } else { // 如果在当前行,得到下一个图片的坐标位置 x += this.backgroundImage.getIconWidth(); } } } } }
备注:JLabel的设置背景图片原理同上。
上一篇: [CSS3] CSS3 Note(3)
下一篇: css 背景与 页面元素相结合