嘿伙计们,我需要帮助我正在尝试制作一个可以用鼠标在窗口中绘图的程序。到目前为止,我已经知道当我点击一个点时出现的位置,但我需要添加一个拖动方法,以便当我将鼠标拖动到页面上时它会绘制东西。有人可以看看我的代码并尽可能地帮助我吗?
这是我的代码:
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)
确保为鼠标移动的每个像素附加线路径(这确保每个移动看起来不像一条直线,而是像一条移动您“绘制”方向的线)。另外,还有一些提示:
虚空
mouseDragged
在mouseMotionAdapter
中使用通常效果更好因为根据我的经验,它通常不会在mouseAdapter
中注册事件。 .由于这是一个绘图程序,我个人会为您的圆圈大小设置一个变量,如果您确实打算将其扩展为更大的东西(例如:g.fillOval( x, y, brushSize, brushSize)).
关于java - 用鼠标绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13576024/