2

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

这是我的代码:

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

1 回答 1

0

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

  1. voidmouseDragged通常在使用时效果更好,mouseMotionAdapter因为根据我的经验,它通常不会在 just 中注册事件mouseAdapter

  2. 由于这是一个绘图程序,如果您确实打算将其扩展为更大的东西(例如:g.fillOval(x,y,brushSize,刷子大小))。

于 2013-12-03T03:36:31.703 回答