首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中使用滚轮进行缩放

在java中使用滚轮进行缩放
EN

Stack Overflow用户
提问于 2017-03-05 19:27:38
回答 1查看 236关注 0票数 1

我正在尝试制作一个允许缩放的Mandelbrot程序,但缩放似乎不起作用,而且我看不出我实现缩放的方式有什么问题。我使用的是eclipse,该程序没有返回任何错误。下面是我的代码:

代码语言:javascript
复制
import java.awt.Graphics; 
import java.awt.event.*; 
import java.awt.image.BufferedImage; 
import javax.swing.JFrame;   

public class Mandelbrot extends JFrame {

            private final int MAX_ITER = 570;
            private static double ZOOM = 200;
            private BufferedImage I;
            private double zx, zy, cX, cY, tmp;
            public static boolean zooming = false;
            public Mandelbrot() 
            {
                 super("MandelbrotSet");
                 setBounds(100, 100, 800, 600);
                 setResizable(false);
                 setDefaultCloseOperation(EXIT_ON_CLOSE);
                 I = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
                 for (int y = 0; y < getHeight(); y++) {
                     for (int x = 0; x < getWidth(); x++) {
                         zx = zy = 0;
                         cX = (x - 400) / ZOOM;
                         cY = (y - 300) / ZOOM;
                         int iter = MAX_ITER;
                         while (zx * zx + zy * zy < 4 && iter > 0) {
                             tmp = zx * zx - zy * zy + cX;
                             zy = 2.0 * zx * zy + cY;
                             zx = tmp;
                             iter--;
                         }
                         I.setRGB(x, y, iter | (iter << 8));
                     }
                }
             setVisible(true);
             while(1>0)
             {
                 if(zooming)
                 {
                     revalidate();
                     repaint();
                     System.out.println("zooming");
                     zooming = false;
                 }
             }    }

            @Override
            public void paint(Graphics g) {
                g.drawImage(I, 0, 0, this);
            }

            public static void main(String[] args) {
                new Mandelbrot().addMouseWheelListener(new MouseWheelListener(){   public void mouseWheelMoved(MouseWheelEvent
        e) {

                if (e.getWheelRotation() < 0) {
                   ZOOM=ZOOM+100;
                   zooming = true;
                } else 
                {
                    ZOOM=ZOOM-100;
                    zooming = true;

                } }    });

            } }
EN

回答 1

Stack Overflow用户

发布于 2017-03-05 19:59:15

  1. 你的构造函数包含一个无限循环。因此,它永远不会返回,您的MouseWheelListener也不会添加到帧中。
  2. 您只计算一次BufferedImage (在无限循环之前),因此即使您在循环之前附加MouseWheelListener,也不会有任何效果。

代码语言:javascript
复制
        public Mandelbrot() 
        {
             super("MandelbrotSet");
             //...
             I = new BufferedImage(getWidth(), getHeight(), BufferedImage.TYPE_INT_RGB);
             calculatePicture();
             setVisible(true);
        }
        public void calculatePicture() {
             for (int y = 0; y < getHeight(); y++) {
                 //...
             }
             repaint();
        }
        public static void main(String[] args) {
            new Mandelbrot().addMouseWheelListener(new MouseWheelListener(){
                public void mouseWheelMoved(MouseWheelEvent
    e) {
                    //...
                    calculatePicture();
                }
            });
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42607824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档