`
daoshud1
  • 浏览: 555169 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

swing JPanel设置背景图 拉伸、平铺、居中

阅读更多
/**
* 可设置背景图片的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等)设置背景图片

    Swing提供了丰富的功能,包括允许开发者为这些组件设置自定义的背景图片,以提升应用的视觉效果。这篇博文主要讨论了如何在JPanel和Container上设置背景图片,下面将详细解释这个过程。 首先,我们需要了解JPanel和...

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

    在Java Swing中,`JPanel` 是一个非常基础且常用的组件,用于构建用户界面。有时候,我们可能希望为`JPanel`添加背景图片以提升视觉效果。本篇将通过两个小例子详细介绍如何在`JPanel`中设置背景图片。 ### 示例1:...

    java Swing多Jpanel动态滑动切换效果

    java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果

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

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

    可插入背景图片的JPanel

    Java的标准库并未提供直接在`JPanel`上设置背景图片的方法,但是通过自定义`JPanel`并重绘组件,我们可以实现这个功能。描述中提到的解决方案可能是通过网上搜索到的一种实现方式,旨在帮助那些尚未找到相应方法的...

    Java继承JPanel实现自适应布局的面板

    在Java Swing库中,`JPanel`是一个非常基础且重要的组件,它被广泛用于构建用户界面。本示例中,我们讨论的是一个自定义的`JPanel`子类,名为`AutojustChildPanel`,该子类实现了自适应布局的能力。这种能力使得组件...

    Java Swing实现窗体添加背景图片的2种方法详解

    在Java Swing中,创建美观的用户界面通常需要对窗体进行一定程度的定制,其中一种常见的需求就是添加背景图片。本文将详细介绍两种在Java Swing中实现窗体添加背景图片的方法,并探讨Swing重绘过程中的`repaint()`和...

    如何在JPanel中显示图片

    对于初学者来说,这还是不错的资源,这个源程序实现在面板中加载一些图片,还是不错的啊!!!

    swing多个jpanel布局切换实例

    在Java的Swing库中,JPanel是组件容器,它允许开发者组织和管理GUI中的组件。JPanel可以使用不同的布局管理器,以便根据需求灵活地调整组件的位置和大小。本实例将探讨如何在Swing应用中实现多个JPanel布局的切换。 ...

    java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果

    java Swing多Jpanel仿安卓苹果桌面动态切换滑动效果

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

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

    设置图片适合swing组件

    在Java Swing图形用户界面开发中,经常需要为各种组件(如JLabel、JButton等)设置背景图片,并且希望这些图片能够根据组件的大小自动调整,以实现美观且响应式的设计效果。本文将详细介绍如何在Swing中实现这一功能...

    java设置背景图片源代码

    Swing中的JFrame类是窗口的基础,我们通常会在其中添加组件和设置背景。 1. **导入必要的库**: ```java import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.image.BufferedImage; ...

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

    例如,在这个示例程序中,我们需要导入 `javax.swing.ImageIcon`、`javax.swing.JFrame`、`javax.swing.JLabel` 和 `javax.swing.JPanel` 等类。 知识点2: 创建主窗口 在 Java 中,创建主窗口需要继承 `JFrame` 类...

    Java Swing JPanel面板的使用方法

    - 背景色:`JPanel` 的背景色可以通过 `setBackground(Color color)` 方法改变。 - 绘制:重写 `paintComponent(Graphics g)` 方法,可以在 `JPanel` 上进行自定义绘图,创建复杂图形或动画。 5. **布局管理器** ...

    swing自定义JTabbedPane组件外观

    在Java Swing库中,`JTabbedPane`是一个非常重要的组件,它允许用户在多个面板(JPanel)之间切换,每个面板都可以包含不同的内容。自定义`JTabbedPane`的外观可以提升应用程序的用户体验,使其更加个性化和专业。...

    Jframe添加背景图片

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

    java Swing练习画图板

    Java Swing 是Java GUI(图形用户界面)库,用于构建桌面应用程序。这个“java Swing练习画图板”项目是一个很好的实践平台,特别适合那些希望增强Java基础知识的初学者。通过模仿Windows 10自带的画图板,这个项目...

    swing 动态加载曲线图

    Swing动态加载曲线图在Java开发中是一种常见需求,特别是在数据可视化或监控系统中。Swing是Java的一个图形用户界面(GUI)工具包,它允许开发者创建桌面应用程序。本话题将深入探讨如何在Swing应用中实现动态加载...

    如何给面板或窗体添加背景图片

    要给JFrame添加背景图片,我们通常会利用JPanel,因为JFrame本身默认是透明的,无法直接设置背景图片。以下是一个基本的步骤: 1. **加载图片**: 使用Java的`javax.imageio.ImageIO`类来读取图片文件,例如JPG、...

Global site tag (gtag.js) - Google Analytics