【问题标题】:FreeHand drawing Java手绘 Java
【发布时间】:2013-11-24 17:33:10
【问题描述】:

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


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

【问题讨论】:

  • 有提笔功能吗?

标签: java swing jframe mouselistener


【解决方案1】:

像这样实现 mouseReleased 方法:

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

这将使它按预期工作。

【讨论】:

  • 非常感谢!!!太简单了,我怎么没有自己想出来..无论如何谢谢sssss
  • 没问题,subash 的代码是一个更好的方法,但是我想尽可能少地修改你的代码,所以我坚持你原来的设计。
【解决方案2】:

试试这个..

public class Mouse extends JPanel implements MouseListener, MouseMotionListener {
    private int x1 ;
    private int y1 ;
    private int cx,cy;
    public Mouse(String name) {
        super();
        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);
        g.drawLine(cx, cy, x1, y1);
    }

    public void mouseDragged(MouseEvent e) {
        x1 = e.getX();
        y1 = e.getY();
        cx = x1;
        cy = y1;
        repaint();
    }

    public void mousePressed(MouseEvent e) {

        cx = e.getX();
        cy = e.getY();
    }

    public void mouseExited(MouseEvent e) {
    }

    public void mouseClicked(MouseEvent e) {
        cx = e.getX();
        cy = e.getY();
        repaint();
    }

    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");

    }
}

【讨论】:

    猜你喜欢
    • 2011-12-12
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2014-05-10
    • 1970-01-01
    相关资源
    最近更新 更多