【问题标题】:Drawing with mouse用鼠标绘图
【发布时间】:2012-11-14 14:08:50
【问题描述】:

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

这是我的代码:

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

【问题讨论】:

    标签: java swing actionlistener mousemove


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 2013-11-21
      • 1970-01-01
      相关资源
      最近更新 更多