import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;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;
public TestJDesktopPane()
{
frame = new JFrame("主面板");
desktopPane = new JDesktopPane(); //虚拟桌面
backLabel = new JLabel(); //背景图标
icon = new ImageIcon("e:/Tulips.jpg");
frame.setBounds(0,0,800,600);
backLabel.setIcon(icon);
frame.addComponentListener(new ComponentAdapter(){ //为主面板添加窗口监听器
@Override
public void componentResized(ComponentEvent e)
{
//System.out.println(frame.getWidth());
backLabel.setSize(frame.getWidth(),frame.getHeight());
System.out.println("-----------");
System.out.println(backLabel.getWidth() + "  " +icon.getIconWidth());
}
});
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();
}
}
对于JLabel背景图标的问题,该添加的监听器也做了,可图片就是不能自动缩放,求解释!!!(背景重绘的不需要)

解决方案 »

  1.   

    JLabel是一个容器,其功能只是显示这张图片。
    如果要图片尺寸改变,那么显示的本身就不是原图,而是做了修改后的图。那么就应该都这样图片的流然后按比例输出,背景重绘就是实现的这个功能,而该这功能你没添加。
      

  2.   

    也就是说背景图片随窗体的伸缩,其实是图片大小的改变,我用嵌套html完成了,可java怎么改变啊!求赐教!!
      

  3.   


    package org.zhangming.swing;import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.event.ComponentAdapter;
    import java.awt.event.ComponentEvent;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);
    // backLabel.setIcon(icon);
    frame.addComponentListener(new ComponentAdapter(){ //为主面板添加窗口监听器
    @Override
    public void componentResized(ComponentEvent e)
    {
    //
    //// g = backLabel.getGraphics();
    //// g.drawImage(icon.getImage(),0,0,frame.getWidth(),frame.getHeight(),frame);
    backLabel.setSize(frame.getWidth(),frame.getHeight());
    backLabel.setText("<html><body><image width='" + frame.getWidth() + "'height='" + frame.getHeight() + "'src='" + getClass().getResource("Tulips.jpg") + "'></img></body></html>");
    // System.out.println(icon.getIconWidth());
    //
    }
    });
    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();
    }
    }
      

  4.   

    看来还是得靠自己啊
    分享一下我的方法(在事件监听器中的代码) icon.setImage(icon.getImage().getScaledInstance(frame.getWidth(),frame.getHeight(),Image.SCALE_DEFAULT)); 
    backLabel.setIcon(icon);
    backLabel.setSize(frame.getWidth(),frame.getHeight());