java jpanel添加图片_JAVA-给Jpanel添加背景图片详解与匿名内部类

841e7386ea2d691c565baf9a7cb8a78d.png

昨天在写一个网络五子棋小游戏的时候碰到了一个问题,就是给Jpanel添加背景图片,并且能使得背景图片可以跟随窗口的变化而变化。

看了很多网络上大神的博客,大家给出了很多很好的解决方案,但是大部分给出的都是在本地成功的案例,我自己实践起来还是碰到了各种各样的BUG,现在我就分享一下我所碰到的问题和怎样去解决这些问题

首先,最重要的一点,重写JPanel的重绘方法

public void paintComponent(Graphics g) {	//重写来达到重绘的母的	
		super.paintComponent(g);	
	//下面这行是为了背景图片可以跟随窗口自行调整大小		
	g.drawImage(ic.getImage(), 0, 0,this.getWidth(),this.getHeight(), this);
	}

这里的IC是一个imageicon的对象,用来储存图片的信息

因为我们最终画图片是让Graphics g 去绘制一个image 类的对象,我们现在有两种方法去实现

首先,创建一个imageicon的对象

一:

ic = new ImageIcon(this.getClass().getResource("图片的相对路径"));

这里图片的相对路径要求的是图片和你的代码要处在同一文件下

如图:

3f5dfecf477c18f9d836f9c4f52346aa.png

然后相对路径里面就可以直接写“模式选择.PNG”,就可以了

二:

ic  = new ImageIcon("绝对路径");

这里就不要求图片的位置了,绝对路径指的是图片在我们的硬盘中处于的绝对位置

6692d95425d0fd51675bc9b1a1a6569d.png

就是这个位置,然后在加上图片的全称就可以了,但是这样程序的可移植性就会降低,所以大家选择自己认为好的方式就可以了

最后再设计Jpanel的基本属性,然后把它加到你的顶级容器如Jframe中就可以了,还不抓紧去实现一下。

顺带一提匿名内部类:

this.addMouseListener(new MouseListener() {
			private int X,Y;
			@Override
			public void mouseReleased(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
				// TODO 自动生成的方法存根
				
			}
			
			@Override
			public void mouseClicked(MouseEvent e) {
				
				X = e.getX();
				Y = e.getY();
				if(X>=20 && X<=440)
				{
					if(Y>=280 && Y<=350)
					{
						System.out.println(1);
					}
					else if(Y>=415 && Y<=470)
					{
						System.out.println(2);
					}
					else if(Y>=525 && Y<=590)
					{
						System.out.println(3);
					}
				}
			}
		});//加入匿名内部类

这是为一个Jpanel的对象添加鼠标的监听的实现,我们可以发现这个监听的实现非常的简单,但是我们如果要为它重新重写成一个类就会显得特别的复杂,但是如果我们创建一个匿名内部类,如上图,我们可以如同普通类一样,为他添加成员变量,成员函数和重写,所以他的优越性就一览无余了,当然,我只会简单的运用,可能有一些原理的东西我没有提及,大家如果感兴趣可以百度寻找一下大神的讲解

今天就写这么多,我们下篇文章见了

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值