java Swing 滚动滑轮改变图片大小


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Toolkit;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class QuoteBasisPhotoUtils extends JFrame {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ZoomPanel zp;

	public QuoteBasisPhotoUtils() {

	}

	public QuoteBasisPhotoUtils(String file) {
		// 获取屏幕大小
		Dimension frameSize = Toolkit.getDefaultToolkit().getScreenSize();
		frameSize.width = frameSize.width / 2;
		frameSize.height = frameSize.height * 3 / 4;

		setSize(frameSize);
		setLocationRelativeTo(null);// 居中显示

		// JScrollPane scrollPane_1 = new JScrollPane();
		// getContentPane().add(scrollPane_1, BorderLayout.CENTER);
		// scrollPane_1
		// .setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		zp = new ZoomPanel(frameSize, file);
		getContentPane().add(zp);

		// scrollPane_1.setViewportView(zp);

		// 添加鼠标滚轮消息响应
		addMouseWheelListener(new MouseWheelListener() {
			public void mouseWheelMoved(MouseWheelEvent e) {

				// 滚轮向前滑动 放大
				if (e.getWheelRotation() < 0) {
					zp.enlargeImg();
				}

				// 滚轮向后滑动 缩小
				else {
					zp.reduceImg();
				}
			}
		});

		// setUndecorated(true);// 去掉修饰框
		// setDefaultCloseOperation(3);
		setResizable(false);
		setVisible(true);
	}
}

// 缩放面板
class ZoomPanel extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ImageIcon ii;
	private Dimension frameSize;
	private int x, y, width, height;// 图片的坐标、缩放的size

	public ZoomPanel(Dimension fs, String imgPath) {
		setBackground(Color.WHITE);
		setToolTipText("滑动滚轮可缩小放大图片");
		this.frameSize = fs;

		ii = new ImageIcon(imgPath);

		// width = ii.getIconWidth();
		// height = ii.getIconHeight();
		width = 500;
		height = 707;
		setImgPos();
	}

	// 设定x、y坐标
	public void setImgPos() {
		x = (frameSize.width - width) / 2;
		y = (frameSize.height - height) / 2;
	}

	// 放大
	public void enlargeImg() {
		if (width >= ii.getIconWidth() * 2) {
			return;
		}
		if (height >= ii.getIconHeight() * 2) {
			return;
		}

		width += width / 9; // 这里为什么是除以9呢 这个是数学问题 留给大家自己想吧 要是不明白,可以留言
		height += height / 9;
		setImgPos();

		repaint();
	}

	// 缩小
	public void reduceImg() {
		if (width <= ii.getIconWidth() / 5) {
			return;
		}
		if (height <= ii.getIconHeight() / 5) {
			return;
		}

		width -= width / 10;
		height -= height / 10;
		setImgPos();

		repaint();
	}

	// 重绘
	public void paintComponent(Graphics g) {
		super.paintComponent(g);

		g.drawImage(ii.getImage(), x, y, width, height, null);
	}
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值