`

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

阅读更多
Swing控件有直接设置背景颜色的方法,但没有直接设置背景图片的方法。这里不解的是为什么Swing默认不提供这个方法呢?既然它不提供我们就自己写一个吧,也不难,你要你知道Swing容器的图片都是用protected void paintComponent(Graphics g) 画上去的就可以了。

我们写一个类提供一个public void setBackground(Icon wallpaper) 方法,然后在这个方法里,我们保存传入的图片,然后利用repaint()方法去重绘控件,这是系统会自动调用控件的protected void paintComponent(Graphics g) 方法。 于是我们就达到了设置背景的目的。下面是完整的代码。附件是一个完整的例子。

import java.awt.Graphics;
import java.awt.Image;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class ZPanel extends JPanel {

	private static final long serialVersionUID = 6702278957072713279L;
	private Icon wallpaper;

	public ZPanel() {
	}

	protected void paintComponent(Graphics g) {
		if (null != wallpaper) {
			processBackground(g);
		}
		System.out.println("f:paintComponent(Graphics g)");
	}

	public void setBackground(Icon wallpaper) {
		this.wallpaper = wallpaper;
		this.repaint();
	}

	private void processBackground(Graphics g) {
		ImageIcon icon = (ImageIcon) wallpaper;
		Image image = icon.getImage();
		int cw = getWidth();
		int ch = getHeight();
		int iw = image.getWidth(this);
		int ih = image.getHeight(this);
		int x = 0;
		int y = 0;
		while (y <= ch) {
			g.drawImage(image, x, y, this);
			x += iw;
			if (x >= cw) {
				x = 0;
				y += ih;
			}
		}
	}
}

文章地址:[url]http://javapub.iteye.com/blog/764681 [/url]
分享到:
评论
4 楼 lian 2011-04-02  
javapub 写道
lian 写道
楼主写的很不错,不过我在用你这个方法的时候遇到一个问题,就是当我重写了JPanel的方法的时候,我用你所写的ZPanel 来替代 Jpanel发现设置背景是OK的,但是我设置背景颜色什么的都失效了! 不信你试试!

我那个方法写的不完整,它就是一个设置背景图片的方法,你如果用来设置了颜色,自然用的是系统方法,然后这个方法还会执行,所以背景颜色就失效了。解决方法就是在这个类里面,再写一个设置背景颜色的方法。



谢谢,博主在百忙之中来回答我的问题,一语惊醒梦中人啊,突然发现自己问的问题很白痴, 谢谢啦!
3 楼 javapub 2011-03-21  
lian 写道
楼主写的很不错,不过我在用你这个方法的时候遇到一个问题,就是当我重写了JPanel的方法的时候,我用你所写的ZPanel 来替代 Jpanel发现设置背景是OK的,但是我设置背景颜色什么的都失效了! 不信你试试!

我那个方法写的不完整,它就是一个设置背景图片的方法,你如果用来设置了颜色,自然用的是系统方法,然后这个方法还会执行,所以背景颜色就失效了。解决方法就是在这个类里面,再写一个设置背景颜色的方法。
2 楼 lian 2011-03-15  
楼主写的很不错,不过我在用你这个方法的时候遇到一个问题,就是当我重写了JPanel的方法的时候,我用你所写的ZPanel 来替代 Jpanel发现设置背景是OK的,但是我设置背景颜色什么的都失效了! 不信你试试!
1 楼 hlzhou 2011-01-07  

相关推荐

    java swing控件

    下面是一个简单的示例,展示了如何使用 Swing 创建一个包含标题、内容面板和背景色设置的窗口。 ```java import java.awt.*; import javax.swing.*; public class ContentPaneDemo extends JFrame { public ...

    JavaSwing界面设计(所有控件及示例)

    Swing 组件允许设置背景色、前景色、字体等属性,以定制界面样式。 总结起来,Java Swing 提供了一整套组件和工具,用于创建丰富的图形用户界面,无论是在桌面应用还是轻量级应用中都有广泛的应用。理解和熟练掌握...

    java swing控件演示

    JFrame frame = new JFrame("Swing控件演示"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel panel = new JPanel(); JButton button = new JButton("点击我"); button.addActionListener(e ...

    Java Swing组件布局管理器之FlowLayout(流式布局)入门教程

    在使用 FlowLayout 时,可以对内部控件之间、内部控件与容器之间的间距进行设置。setHgap(int hgap) 方法用于指定水平间距;setVgap(int vgap) 方法用于指定垂直间距。 FlowLayout 的构造函数有多种,包括无参数...

    Java中Swing.pdf

    这使得Swing控件具备了与AWT控件相似的功能,同时也增加了更多的特性和灵活性。在Swing中,开发者可以通过`add()`方法将控件添加到容器中,并可以使用一系列的方法来设置和获取控件的外观、位置和大小等属性。 ...

    java application添加图片

    这通常涉及到在各种Swing组件(如按钮、标签等)以及面板上设置背景图片。 #### 一、添加图片的一般方法 1. **使用`ImageIcon`类**:这是添加图片最常用的方式之一。首先创建一个`ImageIcon`对象,然后可以通过它...

    JAVA Swing容器

    JAVA SWING 相关的知识,特别是在什么里面控件的运用。Swing 是 Java 的一個GUI 组件库,提供了許多实用的组件,可以用来构建复杂的图形用户界面。 JComponent JComponent 是一个抽象类,用于定义所有子类组件的...

    JavaSwing界面设计(所有控件及示例).ppt

    菜单系统是 GUI 应用程序中常见的功能,Swing 提供了 `JMenuBar`、`JMenu`、` JMenuItem` 等类来创建和管理菜单。`JTable` 用于展示二维数据,支持排序、筛选和编辑等功能,是数据展示的重要工具。 ### 结论 Java ...

    实验五 JAVA图形界面 窗口及常用控件练习

    1. **掌握AWT的container类的使用**:重点掌握Swing中的`JFrame`和`JPanel`如何创建窗口以及如何设置窗口属性。 2. **熟练使用API文档**:学会如何查阅文档,以便能够在文档中快速找到所需的内容。 3. **掌握容器...

    Java生成自定义控件源代码.rar

    组件是构成用户界面的基本元素,如按钮、文本框等,而容器则可以容纳一个或多个组件,比如窗口(JFrame)和面板(JPanel)。自定义控件通常是在现有组件的基础上进行扩展,继承自Java Swing或JavaFX的相关类,如...

    Javaswing登录页面的实现

    import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.xml.bind.util.ValidationEventCollector; import ...

    java的qq聊天程序教程

    4. **控件**:控件是指具体的UI元素,如按钮、文本框等。 #### 三、创建基本的Swing窗体 1. **实现窗体**: - 首先需要创建一个继承自`JFrame`的新类。 - 导入必要的包`java.awt.*`和`javax.swing.*`。 - 在...

    Eclipse中用SWT和JFace开发入门-转摘 .doc

    Composite则是一种可以包含其他控件的容器,类似Java AWT的Container或Swing的JPanel。Item是指那些被包含在其他控件中的组件,如列表或表格中的条目。 JFace库建立在SWT之上,提供更高级的服务,如数据绑定和视图...

    QQ程序java开发实例及详解

    本篇重点讲解Swing框架下的组件使用,如窗体(Frame)、容器(Container)、面板(Panel)以及各种控件的加载与布局管理。 #### 二、窗体与容器 1. **窗体(Frame)** - 在Java Swing中,创建一个窗体需要继承`...

    swt编程,不错的电子书

    - **Composite**:用于包含其他控件的控件,类似于AWT的Container和Swing的JPanel。 - **Item**:被其他控件包含的窗口小部件,如列表和表格,是抽象类。 5. 继承层次结构 Widget是底层的抽象类,Control、...

    SWT和JFace的学习文档

    Composite是一个容器类,可以包含其他控件,类似Java AWT中的Container或Swing中的JPanel。Item则用于表示列表、表格等特定类型的组件,它们通常不是复合组件,但可以由其他控件包含。 Eclipse作为一个跨平台的开发...

    实验五 Java图形用户界面设计.doc

    2. 学习并应用AWT和Swing中的控件。 3. 掌握不同类型的布局管理器,如流布局、网格布局、边界布局和混合布局。 4. 明确容器控件和非容器控件的区别。 5. 理解Java事件处理机制及其流程。 实验内容: 在Java GUI设计...

    Java程序设计(雍俊海)ch08

    Swing提供了丰富的组件,包括JLabel、JTextField、JButton、JCheckBox、JComboBox、JTextArea、JFrame和JPanel等,它们是构建GUI的基础。 JComponent是Swing中大多数组件的基类,位于组件类层次结构的顶端,它是`...

Global site tag (gtag.js) - Google Analytics