gpt4 book ai didi

java - java中使用滚轮缩放

转载 作者:行者123 更新时间:2023-11-30 06:51:49 28 4
gpt4 key购买 nike

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

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;

} } });

} }

最佳答案

  1. 您的构造函数包含无限循环。因此,它永远不会返回,并且您的 MouseWheelListener 永远不会添加到框架中。

  2. 您只计算 BufferedImage 一次(在无限循环之前),因此即使您在循环之前附加 MouseWheelListener 也不会产生任何效果。

我会将图片的计算移至其自己的方法中,从构造函数调用此方法一次,从 MouseWheelListener 调用此方法一次,并从构造函数中删除无限循环。

        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();
}
});
}

关于java - java中使用滚轮缩放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42607824/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com