实现图片的缩放

添加一个滑动组件,实现图片的缩放。


代码:



import java.awt.BorderLayout;
import java.awt.Canvas;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.net.URL;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class Demo6 extends JFrame{

	//实现图片的灵活缩放
	Image img;
	private MyCanvas canvas = null;
	private JPanel contentPanel = null;
	private JSlider jSlider = null;
	private int imgWidth,imgHeight;
	public Demo6(){
		URL url = this.getClass().getResource("img1.jpg");
		img = Toolkit.getDefaultToolkit().getImage(url);
		canvas = new MyCanvas();
		this.setBounds(100, 100, 800, 600);
		this.setContentPane(getContentPanel());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setTitle("实战1");
	}
	private JPanel getContentPanel() {
		if(contentPanel==null){
			contentPanel = new JPanel();
			contentPanel.setLayout(new BorderLayout());
			contentPanel.add(getJSlider(), BorderLayout.SOUTH);
			contentPanel.add(canvas,BorderLayout.CENTER);
		}
		return contentPanel;
	}
	private JSlider getJSlider() {//获得滑动组件
		if(jSlider==null){
			jSlider = new JSlider();
			jSlider.setMaximum(1000);//设置滑块最大取值
			jSlider.setValue(100);//设置滑块当前值
			jSlider.setMinimum(100);//设置滑块的最小取值
			jSlider.addChangeListener(new  ChangeListener() {
				
				@Override
				public void stateChanged(ChangeEvent e) {
					canvas.repaint();//重新绘制画板内容
				}
			});
		}
		return jSlider;
	}
	public static void main(String[] args) {
		Demo6 demo = new Demo6();
		demo.setVisible(true);
	}
	//继承Canvas类以便重写paint()方法可以清理组件原来的内容
	public class MyCanvas extends Canvas{
		public void paint(Graphics g){
			int newW = 0, newH = 0;
			imgWidth = img.getWidth(this); // 获取图片宽度
			imgHeight = img.getHeight(this); // 获取图片高度
			float value = jSlider.getValue();// 滑块组件的取值
			newW = (int) (imgWidth * value / 100);// 计算图片放大后的宽度
			newH = (int) (imgHeight * value / 100);// 计算图片放大后的高度
			g.drawImage(img, 0, 0, newW, newH, this);// 绘制指定大小的图片
		}
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值