最近一直被这个问题困扰这,上网也搜了不少这方面的知识,发现很多人都说用reapint方法(很简单的)进行图片重绘就OK了(没源码),于是乎至今也没实现
但通过自己的摸索也确实学到了不少东东滴!
在看代码前你首先需要了解的内容:(说明下我这里是用JLabel进行加载图片的)
1、为窗口设立监听器,这样当窗口变化时,你才有机会调整背景图片大小。
2、背景图片的自动缩放,是图片本身大小的改变,所以要操作的是图片,而不是JLabel;
3、JLabel的大小千万别忘了设置,也就是添加背景图片的容器,否则是实现不了这个效果滴
下面是我自己的两种方法,希望对你有帮助!(为了节省空间两种方法写在同一代码,嘿嘿)
package org.zhangming.swing;
import java.awt.Graphics;
import java.awt.Image;
import java.ponentAdapter;
import java.ponentEvent;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class TestJDesktopPane
{
JFrame frame;
JDesktopPane desktopPane;
JLabel backLabel;
ImageIcon icon;
Graphics g;
Image image;
public TestJDesktopPane()
{
frame = new JFrame("主面板");
desktopPane = new JDesktopPane();//虚拟桌面
backLabel = new JLabel();//背景图标
//icon = new ImageIcon("e:/Tulips.jpg");
frame.setBounds(0,0,800,600);
frame.addComponentListener(new ComponentAdapter(){//为主面板添加窗口监听器
@Override
public void componentResized(ComponentEvent e)
{
//利用java代码进行实现
//icon.setImage(icon.getImage().getScaledInstance(frame.getWidth(),frame.getHeight(),Image.SCALE_DEFAULT));
//backLabel.setIcon(icon);
backLabel.setSize(frame.getWidth(),frame.getHeight());
//利用Html格式实现
backLabel.setText("
");
}
});
desktopPane.add(backLabel,new Integer(Integer.MIN_VALUE));
frame.add(desktopPane);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args)
{
new TestJDesktopPane();
}
}
第一种是html格式的,其实html在JLabel中的应用还是很广的,比如设置字体大小,颜色,格式等,都可以的。
第二中就是java swing类型的,你只需要将注释部分打开,并将
//利用Html格式实现
backLabel.setText("
");
这部分注释掉就可以看到效果了;
上面都是关于图片的伸缩问题,下面介绍下背景图片的平铺吧(这个是我在调试上面程序时发现奥)
如果你想看到效果只需将
backLabel.setIcon(icon);
这句代码的注释打开就可以看到结果了
,亲,如果你有更好的方法,希望分享下啊!!!