`
niqingyang
  • 浏览: 42496 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

可设置背景的JPanel

阅读更多

  

    在做一款小工具时遇到了需要给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的设置背景图片原理同上。

分享到:
评论

相关推荐

    Swing控件(JPanel,Container等)设置背景图片

    NULL 博文链接:https://javapub.iteye.com/blog/764681

    可插入背景图片的JPanel

    Java GUI 编程中,无法像C#一样向一个Panel中插入背景图片,这里在网上搜索了一个可以插入背景的Jpanel。 跟大家共享一下,也许你已经下载过,但主要还是方便那些还没有找到的人。

    jpanel设置背景图片的二个小例子

    主要介绍了jpanel设置背景图片的二个小例子,实现了动态加载图片做背景的方法,需要的朋友可以参考下

    通过 PanelUI 实现 Swing JPanel 的渐进色背景和图片背景

    JPanel 渐进色背景,和图片背景(可叠加)的实现代码,以及使用样例。 jar文件中包含源代码,本身可执行以便于看效果。

    JFrame设置背景色注意的事项

    如何设置JFrame的背景,需要注意的,设置Jpanel为透明

    JAVA GUI自定义JPanel画板背景

    主要为大家详细介绍了JAVA GUI自定义JPanel画板背景的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    带图片背景的面板

    public class Mycanvas extends JPanel{ private Toolkit tool; private Image myimage; public Mycanvas(){ setPreferredSize(new Dimension(800,600)); tool=getToolkit(); myimage=tool.getImage(&quot;炼铁/...

    为textarea添加背景

    为textarea添加背景 构造文本组件并使之透明 构造一个背景JPanel 将滚动组件加入 将背景组件加入窗体

    AKDigitalPane:JAVA 可定制的数字 JPanel

    AK数字面板 :( 适用于您的 JAVA 应用程序的类似 LED 的可定制显示器): 这是什么? 当我尝试用 Java 编写我... 设置不同的前景色和背景色。 将其设置为斜体(使用以度为单位的角度,向左/向右弯曲的程度)。 .....

    java更换窗口背景颜色

    利用java代码更换创口背景颜色 class SimpleChangePanel extends JPanel implements ActionListener { private JButton yellowButton; public SimpleChangePanel() { yellowButton = new JButton("Yellow"); ...

    image-creator

    控件JPanel允许您设置图形JPanel的尺寸,设置背景和文本颜色以及设置字体。 这是我输入一些文本后的GUI图像。 我增加了绘图JPanel的高度,以便文本适合。 我将绘图颜色和字体保留为默认值。 该应用程序获取了我在...

    Java游戏代码

    //默认的方块的颜色为桔黄色,背景颜色为黑色 private Color backColor = Color.black, frontColor = Color.orange; private int rows, cols, score = 0, scoreForLevelUpdate = 0; private ErsBox[][] boxes; ...

    俄罗斯方块的java实现.zip_俄罗斯方块java通用版

    俄罗斯方块项目,基本功能包括:游戏主... 游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块 通过

    基于java+swing俄罗斯方块项目(源码+论文+视频齐全)

    游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块 通过更改横坐标或纵坐标,然后重新绘制方块...

    毕业设计,游戏,俄罗斯方块游戏,Java完整源代码,内含毕业论文的设计与实现、毕业答辩PPT、任务书、中期检查表以及项目辅导视频

    游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块 通过更改横坐标或纵坐标,然后重新绘制方块...

    基于JAVA俄罗斯方块项目GUL-swing设计软件源码+word文档说明资料.zip

    基于JAVA俄罗斯方块项目GUL_swing设计软件源码+... 游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块

    俄罗斯方块项目GUI-swing(源码+lun文+视频齐全).rar

    游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块 通过更改横坐标或纵坐标,然后重新绘制方块...

    俄罗斯方块项目.zip

    游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块 通过更改横坐标或纵坐标,然后重新绘制方块...

    基于java做的俄罗斯方块项目(源码+视频+论文+数据库).rar

    游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; (4)方块移动、旋转模块 通过更改横坐标或纵坐标,然后重新绘制方块...

    Java俄罗斯方块游戏源码.zip

    游戏用继承自JPanel的GameCanvas类控制背景画布的显示,用rows代表画布的行数,cols代表画布的列数,行数和列数决定着画布拥有方格的数目; 4)方块移动、旋转模块 通过更改横坐标或纵坐标,然后重新绘制方块实现...

Global site tag (gtag.js) - Google Analytics