N年不用java写图形界面,但想了想,在点击事件中给上边图形重绘的方法重新来一遍应该可行。代码如下:
package com.yimik.test.swing;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class BackgroundTest extends JFrame{
private static final long serialVersionUID = 1L;
private JButton b;
private JPanel p ;
public BackgroundTest() {
p = new MyPanel();
p.setBounds(0, 0, 500,200);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setSize(500, 500);
this.setVisible(true);
this.setLayout(null);
this.add(p);
b = new JButton("点击换背景");
b.setBounds(0, 300, 100, 30);
this.add(b);
b.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
super.mouseClicked(e);
ImageIcon image=new ImageIcon(getClass().getResource("/imgs/img2.jpg"));
image.setImage(image.getImage().getScaledInstance(p.getWidth(),p.getHeight(),Image.SCALE_FAST));
image.paintIcon(p, p.getGraphics(),0, 0);
}
});
}
public static void main(String[] args) {
new BackgroundTest();
}
}
class MyPanel extends JPanel{
private static final long serialVersionUID = 1L;
@Override
protected void paintComponent(Graphics g){//重写paintComponent方法以实现jPanel加背景
super.paintComponent(g);
ImageIcon image=new ImageIcon(getClass().getResource("/imgs/img1.jpg")); //获取图像
image.setImage(image.getImage().getScaledInstance(this.getWidth(),this.getHeight(),Image.SCALE_FAST)); //调整图像的分辨率以适应容器
image.paintIcon(this, g,0, 0);
}
}