您的位置:首页 > 编程语言 > Java开发

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

2017-08-23 16:15 309 查看
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: