/**
* 可设置背景图片的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;
}
}
}
}
}
分享到:
相关推荐
NULL 博文链接:https://javapub.iteye.com/blog/764681
主要介绍了jpanel设置背景图片的二个小例子,实现了动态加载图片做背景的方法,需要的朋友可以参考下
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
JPanel 渐进色背景,和图片背景(可叠加)的实现代码,以及使用样例。 jar文件中包含源代码,本身可执行以便于看效果。
对于初学者来说,这还是不错的资源,这个源程序实现在面板中加载一些图片,还是不错的啊!!!
java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果
Java GUI 编程中,无法像C#一样向一个Panel中插入背景图片,这里在网上搜索了一个可以插入背景的Jpanel。 跟大家共享一下,也许你已经下载过,但主要还是方便那些还没有找到的人。
swing多个布局切换实例,就是一个小demo
主要介绍了Java Swing JPanel面板的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
此面板继承自JPanel,放置其上的组件能够根据面板大小的变化,重新计算新的组件位置,从而实现自适应布局,详细使用方法请见源码注释
JPanel是Swing库中的一个容器组件,用于在图形用户界面(GUI)中容纳和管理其他组件。
非常适合加强java基础的人来练手 完整的画图板项目,模仿win10自带画图板写的 很有学习价值
具有圆形边框,阴影和抗锯齿的可重复使用的JPanel扩展
主要为大家详细介绍了JAVA GUI自定义JPanel画板背景的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java swing jpanel 布局
import javax.swing.*;import java.awt.*;public class Mycanvas extends JPanel{ private Toolkit tool; private Image myimage; public Mycanvas(){ setPreferredSize(new Dimension(800,600)); tool=getToolkit()...
Java绘图和JPanel容器
1. Swing1. Swing1. Swing 1. Swing1. Swing1. Swing1. Swing简介 ................................ ................................ ................................ ................................ .........
使用纯java swing 编写的日期时间选择控件,免去了以前的手动输入造成的输入错误,输入丢失的不必要的错误