简单东西-java动态更改JLabel背景图片

原创 2016年01月17日 21:17:24

       java的awt设置背景图片的一种方式是使用JLabel类,它的setIcon可以设置背景图片,但是如何动态修改背景图片呢?这源于问答频道上的一个问题,题主给的代码总是无法正确动态修改背景图片,找了一阵子,发现它处理点击事件的代码存在错误,JLabel类对象实例化一次就够了,然后动态setIcon修改背景。而不是在点击时重新实例化标签对象。

public class DynamicBackground extends JFrame implements ActionListener {
	JMenuBar bar;
	JMenu menus;
	JMenuItem[] items;
	String[] picName = { "琴声悠扬", "绿色草地", "卢浮宫殿" };
	String[] picName2 = { "picture1.jpg", "picture2.jpg", "picture3.jpg" };
	JComponent p3;
	JLabel imgLabel;
	Image bg, bg2;

	public DynamicBackground() {
		bar = new JMenuBar();
		menus = new JMenu("更换背景");
		items = new JMenuItem[3];
		bar.add(menus);
		for (int i = 0; i < 3; i++) {
			items[i] = new JMenuItem(picName[i]);
			menus.add(items[i]);
			items[i].addActionListener(this);
		}
		this.setJMenuBar(bar);
		p3 = (JComponent) getLayeredPane();
		p3.setLayout(null);
		((JComponent) getContentPane()).setOpaque(false);
		this.setUndecorated(false);
		this.setResizable(false);
		JTextArea input = new JTextArea();
		input.setOpaque(false);
		input.setFont(new Font("茶语GBK", Font.PLAIN, 20));
		input.setForeground(Color.GREEN);
		add(input);
		setTitle("BackgroundTest");
		setSize(600, 480);
		setVisible(true);
	}

	public static void main(String[] args) {
		new DynamicBackground();
	}

	public void changePhoto(String picName) {
		System.out.println("change photo :"+picName);
		bg = Toolkit.getDefaultToolkit().getImage("demo\\" + picName);
		bg2 = bg.getScaledInstance(600, 480, Image.SCALE_DEFAULT);
		/*
		 * JLabel只new一次,保证所有的点击操作使用同一个JLabel,唯一不同的是它的icon
		 * 动态修改图片,通过修正setIcon完成,它会自动刷新背景的
		 */
		if(imgLabel==null){
			imgLabel = new JLabel(new ImageIcon(bg2));
			imgLabel.setOpaque(false);
			imgLabel.setBounds(0, 0, 600, 480);
			p3.add(imgLabel, new Integer(-30001));
		}else{
			imgLabel.setIcon(new ImageIcon(bg2));
		}
	}

	public void actionPerformed(ActionEvent e) {
		if (e.getSource() == items[0])
			this.changePhoto(picName2[0]);
		else if (e.getSource() == items[1])
			this.changePhoto(picName2[1]);
		else
			this.changePhoto(picName2[2]);
	}

}

    问答频道题主给出的代码中,点击事件changePhoto中没有imgLbel==null的判断,就是直突突地new操作如下:

	public void changePhoto(String picName) {
		System.out.println("change photo :"+picName);
		bg = Toolkit.getDefaultToolkit().getImage("demo\\" + picName);
		bg2 = bg.getScaledInstance(600, 480, Image.SCALE_DEFAULT);
		imgLabel = new JLabel(new ImageIcon(bg2));
		imgLabel.setOpaque(false);
		imgLabel.setBounds(0, 0, 600, 480);
		p3.add(imgLabel, new Integer(-30001));
		imgLabel.repaint();
	}
      这样每次都new一个JLabel为什么不能达到动态修改的效果呢?先前new的JLabel对象是否还存在于p3这个父类容器中呢?这点还真没想明白。可能是没有重绘界面,但是重绘的方法都试过了,还是不能动态修改。姑且只找到这种能够实现功能的方法,仅此记录一下。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

关于Java Label里设置图片的若干问题

今天在编程时遇到了问题,窗体里的一个label的长和宽莫名其妙自己变了,但我并没有设置! 我一个一个地debug,最后发现,在setVisible(true)这个语句之前,label的长宽还是正常的...
  • xdzcz
  • xdzcz
  • 2015年04月29日 22:36
  • 2097

java实时改变Jlabel的值

用Java的窗体实现实时改变JLabel的值,给它赋0-1000随机数,500以上变色。 package demo1; import java.awt.BorderLayout; import j...
  • xuqimm
  • xuqimm
  • 2017年05月24日 19:54
  • 389

java中JLabel设置背景图片

先贴代码,再看注释;//显示图片的JLabel ImageIcon background =new ImageIcon(test.class.getResource("jpanel...
  • jjarchu
  • jjarchu
  • 2016年05月16日 11:42
  • 1969

如何给Label加背景图片

今天发现一个简单的方法给Label加背影图片,这样以后不用在借用UIImageVeiw了。     话不多说,直接上代码: 效果是:选择的图片有一边圆角问题,显示的就是这个样子的。...

Java Swing界面编程(5)---JLabel中设置图片

package com.beyole.util; import java.awt.Color; import java.io.File; import javax.swing.Icon; impo...

在JLabel上显示图片,并且图片自适应JLabel的大小

在写《Core Java》上的示例代码时,其中有一个FileChooserTest是打开一张图片,并在Label上显示出来,但是这个示例程序有缺点,由于窗口的大小已经固定,而选择打开的图片有大有小,如...

JAVA之设置背景图片的几种方法

 第一种方法,通过JLabel来装载图片。 创建一个ImageIcon对象,来获取背景图片。 ImageIcon img = new ImageIcon("image/img1.png");...

使用java代码修改背景图片、背景颜色

1.设置背景图片,图片来源于drawable; flightInfoPanel.setBackgroundDrawable(getResources().getDrawable(R.drawable...

Jfreechart柱形图详细设置

一. 下载与环境配置  此最新版本为 1.0.13  解压jfreechart-1.0.13.zip 将lib目录下的jfreechart-1.0.13.jar 、jcommon-1.0.16.j...

Jfreechart图表生成方法

1.1 什么是jfreechart JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:简单东西-java动态更改JLabel背景图片
举报原因:
原因补充:

(最多只允许输入30个字)