`
niqingyang
  • 浏览: 44187 次
  • 性别: 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等)设置背景图片

    这篇博文主要讨论了如何在JPanel和Container上设置背景图片,下面将详细解释这个过程。 首先,我们需要了解JPanel和Container的基本概念。JPanel是Swing中的一个轻量级组件,它是Container类的一个子类,主要用于...

    可插入背景图片的JPanel

    标题“可插入背景图片的JPanel”指向的就是一个解决此类问题的技巧。Java的标准库并未提供直接在`JPanel`上设置背景图片的方法,但是通过自定义`JPanel`并重绘组件,我们可以实现这个功能。描述中提到的解决方案可能...

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

    本篇将通过两个小例子详细介绍如何在`JPanel`中设置背景图片。 ### 示例1:动态加载背景图片 在第一个例子中,我们创建了一个名为 `ImagePanel` 的类,它继承自 `JPanel`。这个类的目的是能够动态加载图片作为背景...

    JFrame设置背景色注意的事项

    ### JFrame 设置背景色注意事项 在Java Swing中,`JFrame`是用于创建图形用户界面的主要容器之一。在处理`JFrame`的背景色时,可能会遇到一些问题,尤其是在需要设置透明背景的情况下。本文将详细解释如何正确地...

    JAVA GUI自定义JPanel画板背景

    在默认情况下,JPanel有一个简单的背景色,但通常我们需要更个性化的设计,比如设置自定义的图片背景。为了实现这个目标,我们需要重写JPanel的`paintComponent()`方法。在重写过程中,我们可以利用Graphics对象来...

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

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

    java设置背景图片源代码

    3. **自定义JPanel并设置背景**: 创建一个自定义的JPanel,并在它的`paintComponent`方法中绘制背景图片。这样,每当JPanel需要重绘时,背景图片就会显示出来。 ```java class BackgroundPanel extends JPanel {...

    JFrame中添加和设置JPanel的方法实例解析

    在 `JFrame` 中添加和设置 `JPanel` 是构建用户界面时常见的操作。本篇文章将详细解析如何在 `JFrame` 中实现这一过程。 首先,`JFrame` 是 `AWT Frame` 类的子类,它扩展了 `Frame` 类的功能,并提供了Swing特有的...

    java背景设置的两种方式

    1. **利用`JPanel`设置背景** `JPanel`是Java Swing中的一个基础组件,它被用来添加自定义的组件或绘制图形。在`JPanel`上设置背景图像,我们可以重写`paintComponent()`方法。首先,我们需要加载图片,然后在`...

    用java JFrame,JPanel写的大鱼吃小鱼小游戏

    开发者可以通过设置JFrame的大小、位置、边框、背景色等属性来定制窗口外观,并通过add()方法添加其他组件到JFrame上。 JPanel是Swing中另一个重要的组件,它是一个空白容器,可以用来放置其他的组件或者绘制自定义...

    Java程序添加漂亮背景图片的方法

    通过使用 Java 的图形用户界面(GUI)组件,例如 JFrame、JPanel、JLabel 等,可以轻松地将背景图片添加到 GUI 界面中。本文将详细介绍如何使用 Java 添加背景图片到 GUI 界面中。 首先,需要导入相关的包,包括 ...

    JAVA如何在为窗口设置背景图片.doc

    例如,在这个示例程序中,我们将背景图片添加到一个 `JPanel` 中,并设置其大小和位置以便填充整个窗口。 知识点5: 使内容窗格透明 在 Java 中,使内容窗格透明需要使用 `setOpaque(false)` 方法。例如,在这个...

    二十Java图形化界面设计中间容器Jpanel.pdf

    例如,可以使用 setBackground() 方法设置 JPanel 的背景色,使用 setSize() 方法设置 JPanel 的大小。 例如,在窗体中添加一个蓝色的面板: ```java JPanel p = new JPanel(); p.setBackground(Color.BLUE); p.set...

    带图片背景的面板

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

    Java设置窗体背景图像.docx

    为了克服上述问题,可以考虑使用自定义`JPanel`的方式设置背景图像,这种方法更加灵活且功能强大。 1. **创建自定义面板**: - 定义一个继承自`JPanel`的类,并重写`paintComponent`方法以绘制背景图像。 ```java...

    Java:俄罗斯方块JPanel版

    5. **图片资源**: 项目中可能包含了方块和背景的图片资源,这些可以通过Java的ImageIcon类加载,并在JPanel上显示。`ImageIO`类可用于从文件中读取图像数据。 6. **多线程**: 为了使游戏流畅运行,游戏循环通常在...

    为textarea添加背景

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

    Jframe添加背景图片

    在Java Swing中,我们经常需要为`JFrame`窗口设置背景图片来提升用户体验或实现特定的设计需求。本文将详细介绍如何在`JFrame`中添加背景图片,并通过一个示例程序来具体说明实现过程。 #### 一、基本原理 在Swing...

    java设置背景

    为了使背景图像完全显示出来,需要将`JPanel`设置为透明: ```java panel.setOpaque(false); ``` - **注意**:如果希望背景图像与其他非透明组件(如按钮)结合使用,可能需要对这些组件也进行透明度设置或调整...

    圆形边框JPanel(JPanel图形改进)

    默认情况下,`JPanel`没有边框,背景透明,可以用来添加其他组件或者作为容器来组织UI布局。开发者可以通过重写`paintComponent()`方法来自定义面板的绘制行为。 对于“圆形边框”,这通常涉及到Java的2D图形API。...

Global site tag (gtag.js) - Google Analytics