java - 徒手画Java

标签 java swing jframe mouselistener

我正在尝试创建一个可以徒手绘图的程序。 我创建了一个点数组,它保存了鼠标的当前点。 问题是当我释放鼠标然后在另一个位置再次按下它时,它会在释放点和按下点之间绘制一条线。 我应该添加或更改什么?


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Mouse extends JPanel implements MouseListener, MouseMotionListener {
    private int index = 0;
    private Point[] arr = new Point[100000];

    public Mouse(String name) {
        super();
        index = 0;
        this.addMouseListener(this);
        this.addMouseMotionListener(this);
        JFrame fr = new JFrame(name);
        fr.add(this);
        fr.setSize(500, 500);
        setBackground(Color.green);
        fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        fr.setVisible(true);

    }
    public void paintComponent(Graphics g) {
        super.paintComponents(g);
        for (int i = 0; i < index - 1; i++)
            g.drawLine(arr[i].x, arr[i].y, arr[i + 1].x, arr[i + 1].y);
    }

    public void mouseDragged(MouseEvent e) {
        arr[index] = new Point(e.getX(), e.getY());
        index++;
        System.out.println(index);
        repaint();
    }
    public void mousePressed(MouseEvent e) {
        arr[index] = new Point(e.getX(), e.getY());
        index++;
        System.out.println(index);
        repaint();
    }

    public void mouseExited(MouseEvent e) {}
    public void mouseClicked(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseMoved(MouseEvent e) {}

    public static void main(String[] args) {
        Mouse mouse = new Mouse("Mouse");
    }
}

最佳答案

像这样实现 mouseReleased 方法:

public void mouseReleased(MouseEvent e)
{
    arr = new Point[100000];
    index = 0;
}

这将使其按照您的预期工作。

关于java - 徒手画Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20177596/

相关文章:

Java内存优化(如何避免内存泄漏 - 具体示例)

java - JAXB 编码(marshal) setProperty com.sun.xml.bind.CharacterEscapeHandler

java - CellRenderer 项目重绘

Java Swing添加JPanel到JLayeredpane到Jframe动态改变大小

java - 从 JOptionPane 返回 JFrame

java - 安卓 "Could not find method"

java - 无法在 Spring Boot 2 中绑定(bind) Zipkin 枚举

java - 使用循环执行actionPerformed(在单击按钮上)

java - 将变量值从服务器发送到客户端

java - 在 Jframe java 中播放媒体文件