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背景图标的问题,该添加的监听器也做了,可图片就是不能自动缩放,求解释!!!(背景重绘的不需要)
4 个解决方案
#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());
#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());