Java AWT 图形界面编程使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )

Posted 韩曙亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java AWT 图形界面编程使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )相关的知识,希望对你有一定的参考价值。

文章目录





一、使用鼠标滚轮放大缩小 Canvas 画布 - 要点分析




1、鼠标滚轮事件


设置一个缩放比例 scale , 默认为 1.0 ;

    private double scale = 1.0;  // 缩放比例,默认为 1.0

设置鼠标滚轮监听 , 在 Canvas 组件中 , 调用 addMouseWheelListener 函数 , 添加 鼠标滚轮监听器 MouseWheelListener ,

实现该监听器中的 void mouseWheelMoved(MouseWheelEvent e) 函数 ,

当鼠标滚轮滑动时 , 通过 MouseWheelEvent 对象 , 获取鼠标滚轮的滑动方向 ,

  • 向上滑动时 , 放大画布 , 画布增加 10% ;
  • 向下滑动时 , 缩小画布 , 画布缩小 10% ;

一旦 scale 缩放比例发生改变 , 立刻 调用 repaint() 函数 重新绘制 Canvas 画布 , 应用该缩放比例 ;

        // 添加鼠标滚轮监听器
        addMouseWheelListener(new MouseWheelListener() 
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) 
                int notches = e.getWheelRotation();
                if (notches < 0) 
                    // 滚轮向上,放大画布
                    scale *= 1.1;
                 else 
                    // 滚轮向下,缩小画布
                    scale /= 1.1;
                
                repaint();  // 重新绘制画布
            
        );

2、核心代码示例


核心代码示例 :

public class MyCanvas extends Canvas 
    private double scale = 1.0;  // 缩放比例,默认为 1.0

    public MyCanvas() 
        // 添加鼠标滚轮监听器
        addMouseWheelListener(new MouseWheelListener() 
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) 
                int notches = e.getWheelRotation();
                if (notches < 0) 
                    // 滚轮向上,放大画布
                    scale *= 1.1;
                 else 
                    // 滚轮向下,缩小画布
                    scale /= 1.1;
                
                repaint();  // 重新绘制画布
            
        );
    

    @Override
    public void paint(Graphics g) 
        Graphics2D g2d = (Graphics2D) g;
        g2d.scale(scale, scale);  // 缩放画布
        // 绘制图形
    





二、绘制超大图像 + 鼠标拖动 + 鼠标滚轮缩放示例



【Java AWT 图形界面编程】Canvas 中绘制超大图片 ( 使用鼠标拖动查看全图 | 设置 JFrame 窗口自动关闭 | 获取并绘制图片 | 鼠标拖动计算位移 | 画布偏移 ) 博客中 , 绘制了超大图像 , 可以使用鼠标拖动 ,

这里在上述基础上 , 新增鼠标滚轮缩放示例 ;


1、代码示例


代码示例 :

import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

public class LargeCanvas extends JPanel 

    // 鼠标按下时的坐标 以及 更新后的坐标
    private int startX, startY;

    // 当前的位置偏移
    private int offsetX = 0, offsetY = 0;

    // 缩放比例,默认为 1.0
    private double scale = 1.0;

    public LargeCanvas() 
        // 画布大小设置为 800 x 600
        // 绘制的图片是 2K 大小的图片
        setPreferredSize(new Dimension(800, 600));

        // 添加鼠标滚轮监听器
        addMouseWheelListener(new MouseWheelListener() 
            @Override
            public void mouseWheelMoved(MouseWheelEvent e) 
                int notches = e.getWheelRotation();
                if (notches < 0) 
                    // 滚轮向上,放大画布
                    scale *= 1.1;
                 else 
                    // 滚轮向下,缩小画布
                    scale /= 1.1;
                
                repaint();  // 重新绘制画布
            
        );

        // 为组件设置鼠标监听事件
        addMouseListener(new MouseAdapter() 
            public void mousePressed(MouseEvent e) 
                // 记录鼠标按下时的坐标
                startX = e.getX();
                startY = e.getY();
            
        );

        // 添加鼠标动作监听
        addMouseMotionListener(new MouseAdapter() 
            // 鼠标拖动事件
            public void mouseDragged(MouseEvent e) 
                // 统计本次鼠标移动的相对值
                int dx = e.getX() - startX;
                int dy = e.getY() - startY;

                // 偏移量累加
                offsetX += dx;
                offsetY += dy;

                // 重新绘图
                repaint();

                // 记录当前拖动后的位置
                startX += dx;
                startY += dy;
            
        );
    

    public void paintComponent(Graphics g) 
        super.paintComponent(g);

        // 画布进行整体偏移
        Graphics2D g2 = (Graphics2D)g;

        // 缩放画布
        g2.scale(scale, scale);

        // 拖动画布
        g2.translate(offsetX, offsetY);

        // 获取图片
        Image image = Toolkit.getDefaultToolkit().getImage("image.jpg");

        // 绘制图形
        g2.drawImage(image, 0, 0, this);
    

    public static void main(String[] args) 
        // 创建 JFrame 窗口
        JFrame frame = new JFrame("Large Canvas");

        // 设置窗口关闭行为 点击右上角关闭按钮 关闭窗口并退出应用
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // 创建画布
        LargeCanvas canvas = new LargeCanvas();

        // 将画布放入滚动布局
        JScrollPane scrollPane = new JScrollPane(canvas);

        // 将滚动布局放入窗口
        frame.getContentPane().add(scrollPane);

        // 窗口自适应
        frame.pack();

        // 窗口设置可见
        frame.setVisible(true);
    


2、效果展示


程序运行后默认效果 :

使用鼠标滚轮缩小画布 :

拖动缩小后的画布到中央位置 :

wps打开鼠标滚轴一动页面就放大缩小

wps打开鼠标滚轴一动页面就放大缩小

这里分享下在文档中,word放大与缩小页面显示的方法。

1、首先在电脑中打开word文档,然后找到工具栏上的视图。

2、点击工具栏上的显示比例。

3、在数值处填上相应的数值,如果要放大就要输入大于100的数,如果是缩小就要小于100的数。

4、或者在word编辑界面,找到左下角的放大与缩小功能。往左边拖到刻度,就会缩小,反之就是放大。

参考技术A 如果是在编辑软件中想要阻止鼠标滚轮缩放,可以在对应的软件中进行设置,将其中的"智能鼠标缩放"功能选项的勾选状态取消即可。

2、如果想要在使用浏览器时阻止鼠标滚轮缩放,可以将键盘的"Ctrl"键的绑定状态取消,使用浏览器时"Ctrl"键没有进行运作,单靠鼠标设备一般是不能进行缩放操作的。如果没有按"Ctrl"键,鼠标滚轮还是可以进行网页缩放,可以清理"Ctrl"键上的灰尘或检查键盘是否工作正常。

3.想要对鼠标的滚轮进行设置,可以在键盘上按"WIN"键加"R"键打开运行窗口,输入:main.cpl,然后按回车键打开鼠标属性,在属性窗口中点击"滑轮",然后就可以按需要设置垂直滚动方式和水平滚动方式,设置好后点击底部的"确定"选项即可。

以officeword2013为例有以下几种方式方法一:1、将光标定位在倒数第二页的末尾位置。2、按delete键进行删除,也可以使用ctrl键+delete键进行删除。方法二:1、最原始的方法:将光标移动到最后一页的起始处,不停的按删除键。方法三:1、在菜单栏找到“页面布局”页签,选择“页边距”功能。2、选择默认的页边距或是自定义修改页边距,通过调整页边距大小也可以删除空白页。方法四:1、将光标移动到最后一页,在文档中单击右击,选择“段落”,打开段落设置。2、调整行距,设置行距的数据(根据实际情况而定),通过调整行距也可以删除空白页。方法五:1、选中空白页的换行符,单击右键选择“字体功能”。2、打开“字体”功能款,勾选“隐藏”效果即可。
参考技术B 有的情况下 在文字中单击一下在滚滑轮就会变回原来的,如果不行最大的可能就是你的CTRL键被卡住了,或者是坏了。 参考技术C 在可以编辑文字的地方点击一下,确定焦点,然后一般就可以了;
如果依旧,检测下是不是ctrl卡住了,如果接了外接键盘就建议拔掉键盘。

以上是关于Java AWT 图形界面编程使用鼠标滚轮放大缩小 Canvas 画布 ( 鼠标滚轮事件监听器 MouseWheelListener )的主要内容,如果未能解决你的问题,请参考以下文章

JS控制图片放大和缩小怎么改

wps打开鼠标滚轴一动页面就放大缩小

在网页里点开放大了一张图片后,怎么实现随鼠标滚轮放大缩小?

在java Applet里如何实现鼠标滚轮放大缩小图片?

使用 ctrl+鼠标滚轮 flex3 在高级数据网格中放大/缩小

在 gmap 上移动鼠标滚轮时避免放大/缩小