描述:使背景图跟着Jframe大小的改变而改变的Java实现
实现步骤:重写JLabel中的Paint方法+给Jframe添加一个组件监听器-
重写paint方法,调用drawImage方法根据JLabel的大小绘制图片
-
给Jframe添加一个ComponentListener,监听Jframe的大小是否改变。若改变,则重新设置JLabel的大小,使之等于Jframe的大小,并调用repaint()方法。注:repaint()方法会自动调用paint方法.
package first;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class ImageSize extends Jframe{
public ImageSize() {
super("背景图自适应");
ImageIcon ii=new ImageIcon("bg2.jpg"); //图标
JLabel bg=new JLabel(ii) { // 匿名类部类重写paint方法
public void paint(Graphics g) {
Image img=ii.getImage();
g.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), null);
}
};
this.getLayeredPane().add(bg,Integer.valueOf(Integer.MIN_VALUE)); //放到最底层,作为背景图片
JPanel showPanel=(JPanel)this.getContentPane(); //之所以要转换,因为ContentPane没有setOpaque方法
showPanel.setOpaque(false); // 设置成透明的
JLabel motto=new JLabel("不相信有完成不了的任务,不相信有克服不了的困难",JLabel.CENTER);
motto.setFont(new Font("黑体",Font.BOLD,20));
motto.setForeground(Color.white);
showPanel.add(motto,BorderLayout.NORTH);
this.addComponentListener(new ComponentAdapter() {
public void componentResized(ComponentEvent e) { //监测整个框架大小是否改变
bg.setSize(ImageSize.this.getSize());
bg.repaint(); //重绘,会自动调用paint方法
}
});
this.setSize(ii.getIconWidth(),ii.getIconHeight()); // 图片多大,框架就多大
bg.setSize(this.getSize()); // label大小等于frame的大小
this.setVisible(true);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);
}
public static void main(String args[]) {
new ImageSize();
}
}
效果展示



