![841e7386ea2d691c565baf9a7cb8a78d.png](https://i-blog.csdnimg.cn/blog_migrate/9f7a6559f2f0beeba45de332c23b73cb.jpeg)
昨天在写一个网络五子棋小游戏的时候碰到了一个问题,就是给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](https://i-blog.csdnimg.cn/blog_migrate/3e7250bd14e4856344d0f5e017f26543.jpeg)
然后相对路径里面就可以直接写“模式选择.PNG”,就可以了
二:
ic = new ImageIcon("绝对路径");
这里就不要求图片的位置了,绝对路径指的是图片在我们的硬盘中处于的绝对位置
![6692d95425d0fd51675bc9b1a1a6569d.png](https://i-blog.csdnimg.cn/blog_migrate/c97d4dcc05f09aff5bf06b9e9039c547.jpeg)
就是这个位置,然后在加上图片的全称就可以了,但是这样程序的可移植性就会降低,所以大家选择自己认为好的方式就可以了
最后再设计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的对象添加鼠标的监听的实现,我们可以发现这个监听的实现非常的简单,但是我们如果要为它重新重写成一个类就会显得特别的复杂,但是如果我们创建一个匿名内部类,如上图,我们可以如同普通类一样,为他添加成员变量,成员函数和重写,所以他的优越性就一览无余了,当然,我只会简单的运用,可能有一些原理的东西我没有提及,大家如果感兴趣可以百度寻找一下大神的讲解
今天就写这么多,我们下篇文章见了