java - 用鼠标绘图

标签 java swing actionlistener mousemove

嘿伙计们,我需要帮助我正在尝试制作一个可以用鼠标在窗口中绘图的程序。到目前为止,我已经知道当我点击一个点时出现的位置,但我需要添加一个拖动方法,以便当我将鼠标拖动到页面上时它会绘制东西。有人可以看看我的代码并尽可能地帮助我吗?

这是我的代码:

import javax.swing.*;
import java.awt.event.*;
public class mouse {
    private static int x,y;
    private static draw object = new draw ();
    public static void main(String[] args){
        JFrame frame = new JFrame ("Mouse");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,400);
        frame.add(object);
        object.addMouseListener(new AL());
    }
    static class AL extends MouseAdapter{
      public void mousePressed(MouseEvent e){
        x = e.getX();
        y = e.getY();
        object.drawing(x, y);
      }
      public void mouseDragged( MouseEvent e) {
        x= e.getX();
        y= e.getY();
        object.drawing(x, y);
      }
    }
}

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

public class draw extends JPanel {
    private static int x,y;
    public void drawing (int xx, int yy){
        x=xx;
        y=yy;
        repaint();
    }

    public void paintComponent (Graphics g){
        g.setColor(Color.black);
        g.fillOval(x, y, 10, 10);
    }
}

最佳答案

我的一个想法是,每当单击鼠标并根据列表的大小绘制时,将每个鼠标坐标添加到单独的列表中,但是由于您使用的是鼠标拖动,因此您可以只使用 Path2D.lineTo(x, y)并使用 e.getX()e.getY()对于 x 和 y 坐标。使用后 Path2D.moveTo(x, y)确保为鼠标移动的每个像素附加线路径(这确保每个移动看起来不像一条直线,而是像一条移动您“绘制”方向的线)。另外,还有一些提示:

  1. 虚空 mouseDraggedmouseMotionAdapter 中使用通常效果更好因为根据我的经验,它通常不会在 mouseAdapter 中注册事件。 .

  2. 由于这是一个绘图程序,我个人会为您的圆圈大小设置一个变量,如果您确实打算将其扩展为更大的东西(例如:g.fillOval( x, y, brushSize, brushSize)).

关于java - 用鼠标绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576024/

相关文章:

java - weld-osgi、pax-cdi 和fighterfish 之间有什么区别

java - 如何将接受的对象分配给泛型?

java - 无法在 macOs 上启动 Jenkins - Java 10

java - 在 Netbeans 平台中创建类似 Empathy 聊天窗口的主视图

java - 如何在 Action 监听器中获取多个JButton的来源?

java - 动态转换为对象 ArrayList 中未知的类

java - 使用jtree从文本文件到树结构 View

java - 边框布局无法按预期工作

java - 如何退出 ActionListener 中的方法

java - 我应该如何以及在何处将 ActionListener 添加到我的代码中?