/**
* 可设置背景图片的JPanel,提供了三种显示背景图片的方式:居中、平铺和拉伸。
* 未设置背景图片的情况下,同JPanel。
*
* @author 003
*/
public class JImagePane extends JPanel
{
private static final long serialVersionUID = -8251916094895167058L;
/**
* 居中
*/
public static final String CENTRE = "Centre";
/**
* 平铺
*/
public static final String TILED = "Tiled";
/**
* 拉伸
*/
public static final String SCALED = "Scaled";
/**
* 背景图片
*/
private Image backgroundImage;
/**
* 背景图片显示模式
*/
private String imageDisplayMode;
/**
* 背景图片显示模式索引(引入此属性有助于必要时扩展)
*/
private int modeIndex;
/**
* 构造一个没有背景图片的JImagePane
*/
public JImagePane()
{
this(null, CENTRE);
}
/**
* 构造一个具有指定背景图片和指定显示模式的JImagePane
* @param image 背景图片
* @param modeName 背景图片显示模式
*/
public JImagePane(Image image, String modeName)
{
super();
setBackgroundImage(image);
setImageDisplayMode(modeName);
}
/**
* 设置背景图片
* @param image 背景图片
*/
public void setBackgroundImage(Image image)
{
this.backgroundImage = image;
this.repaint();
}
/**
* 获取背景图片
* @return 背景图片
*/
public Image getBackgroundImage()
{
return backgroundImage;
}
/**
* 设置背景图片显示模式
* @param modeName 模式名称,取值仅限于ImagePane.TILED ImagePane.SCALED ImagePane.CENTRE
*/
public void setImageDisplayMode(String modeName)
{
if(modeName != null)
{
modeName = modeName.trim();
//居中
if(modeName.equalsIgnoreCase(CENTRE))
{
this.imageDisplayMode = CENTRE;
modeIndex = 0;
}
//平铺
else if(modeName.equalsIgnoreCase(TILED))
{
this.imageDisplayMode = TILED;
modeIndex = 1;
}
//拉伸
else if(modeName.equalsIgnoreCase(SCALED))
{
this.imageDisplayMode = SCALED;
modeIndex = 2;
}
this.repaint();
}
}
/**
* 获取背景图片显示模式
* @return 显示模式
*/
public String getImageDisplayMode()
{
return imageDisplayMode;
}
/**
* 绘制组件
* @see javax.swing.JComponent#paintComponent(Graphics)
*/
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
//如果设置了背景图片则显示
if(backgroundImage != null)
{
int width = this.getWidth();
int height = this.getHeight();
int imageWidth = backgroundImage.getWidth(this);
int imageHeight = backgroundImage.getHeight(this);
switch(modeIndex)
{
//居中
case 0:
{
int x = (width - imageWidth) / 2;
int y = (height - imageHeight) / 2;
g.drawImage(backgroundImage, x, y, this);
break;
}
//平铺
case 1:
{
for(int ix = 0; ix < width; ix += imageWidth)
{
for(int iy = 0; iy < height; iy += imageHeight)
{
g.drawImage(backgroundImage, ix, iy, this);
}
}
break;
}
//拉伸
case 2:
{
g.drawImage(backgroundImage, 0, 0, width, height, this);
break;
}
}
}
}
}
分享到:
相关推荐
Swing提供了丰富的功能,包括允许开发者为这些组件设置自定义的背景图片,以提升应用的视觉效果。这篇博文主要讨论了如何在JPanel和Container上设置背景图片,下面将详细解释这个过程。 首先,我们需要了解JPanel和...
在Java Swing中,`JPanel` 是一个非常基础且常用的组件,用于构建用户界面。有时候,我们可能希望为`JPanel`添加背景图片以提升视觉效果。本篇将通过两个小例子详细介绍如何在`JPanel`中设置背景图片。 ### 示例1:...
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
JPanel 渐进色背景,和图片背景(可叠加)的实现代码,以及使用样例。 jar文件中包含源代码,本身可执行以便于看效果。
Java的标准库并未提供直接在`JPanel`上设置背景图片的方法,但是通过自定义`JPanel`并重绘组件,我们可以实现这个功能。描述中提到的解决方案可能是通过网上搜索到的一种实现方式,旨在帮助那些尚未找到相应方法的...
在Java Swing库中,`JPanel`是一个非常基础且重要的组件,它被广泛用于构建用户界面。本示例中,我们讨论的是一个自定义的`JPanel`子类,名为`AutojustChildPanel`,该子类实现了自适应布局的能力。这种能力使得组件...
在Java Swing中,创建美观的用户界面通常需要对窗体进行一定程度的定制,其中一种常见的需求就是添加背景图片。本文将详细介绍两种在Java Swing中实现窗体添加背景图片的方法,并探讨Swing重绘过程中的`repaint()`和...
对于初学者来说,这还是不错的资源,这个源程序实现在面板中加载一些图片,还是不错的啊!!!
在Java的Swing库中,JPanel是组件容器,它允许开发者组织和管理GUI中的组件。JPanel可以使用不同的布局管理器,以便根据需求灵活地调整组件的位置和大小。本实例将探讨如何在Swing应用中实现多个JPanel布局的切换。 ...
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
通过使用 Java 的图形用户界面(GUI)组件,例如 JFrame、JPanel、JLabel 等,可以轻松地将背景图片添加到 GUI 界面中。本文将详细介绍如何使用 Java 添加背景图片到 GUI 界面中。 首先,需要导入相关的包,包括 ...
在Java Swing图形用户界面开发中,经常需要为各种组件(如JLabel、JButton等)设置背景图片,并且希望这些图片能够根据组件的大小自动调整,以实现美观且响应式的设计效果。本文将详细介绍如何在Swing中实现这一功能...
Swing中的JFrame类是窗口的基础,我们通常会在其中添加组件和设置背景。 1. **导入必要的库**: ```java import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.image.BufferedImage; ...
例如,在这个示例程序中,我们需要导入 `javax.swing.ImageIcon`、`javax.swing.JFrame`、`javax.swing.JLabel` 和 `javax.swing.JPanel` 等类。 知识点2: 创建主窗口 在 Java 中,创建主窗口需要继承 `JFrame` 类...
- 背景色:`JPanel` 的背景色可以通过 `setBackground(Color color)` 方法改变。 - 绘制:重写 `paintComponent(Graphics g)` 方法,可以在 `JPanel` 上进行自定义绘图,创建复杂图形或动画。 5. **布局管理器** ...
在Java Swing库中,`JTabbedPane`是一个非常重要的组件,它允许用户在多个面板(JPanel)之间切换,每个面板都可以包含不同的内容。自定义`JTabbedPane`的外观可以提升应用程序的用户体验,使其更加个性化和专业。...
在Java Swing中,我们经常需要为`JFrame`窗口设置背景图片来提升用户体验或实现特定的设计需求。本文将详细介绍如何在`JFrame`中添加背景图片,并通过一个示例程序来具体说明实现过程。 #### 一、基本原理 在Swing...
Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。这个“java Swing练习画图板”项目是一个很好的实践平台,特别适合那些希望增强Java基础知识的初学者。通过模仿Windows 10自带的画图板,这个项目...
Swing动态加载曲线图在Java开发中是一种常见需求,特别是在数据可视化或监控系统中。Swing是Java的一个图形用户界面(GUI)工具包,它允许开发者创建桌面应用程序。本话题将深入探讨如何在Swing应用中实现动态加载...
要给JFrame添加背景图片,我们通常会利用JPanel,因为JFrame本身默认是透明的,无法直接设置背景图片。以下是一个基本的步骤: 1. **加载图片**: 使用Java的`javax.imageio.ImageIO`类来读取图片文件,例如JPG、...