Java 8 Graphics2D,使用点(例如点开始)拖动鼠标时徒手绘制

Java 8 Graphics2D,使用点(例如点开始)拖动鼠标时徒手绘制,java,graphics2d,Java,Graphics2d,我正在使用Graphics2D、Point和Line2D(用于画笔)创建徒手绘图程序(用于教育目的)。我的问题是,我可以使用鼠标拖动来获得要绘制的线,但它始终从JPanel的左上角开始,直到我释放鼠标按钮的位置。我希望能够使用点(例如点开始点、端点)在移动鼠标时进行绘制,释放时停止,再次按下鼠标时在新点开始绘制。有人能帮我用鼠标监听器(鼠标标记,…按下,…释放等)编码吗 }建议: 首先,始终覆盖paintComponent,而不是paint 并始终在覆盖范围内调用super的绘制方法 这里有两

我正在使用
Graphics2D
Point
Line2D
(用于画笔)创建徒手绘图程序(用于教育目的)。我的问题是,我可以使用鼠标拖动来获得要绘制的线,但它始终从
JPanel
的左上角开始,直到我释放鼠标按钮的位置。我希望能够使用
(例如点开始点、端点)在移动鼠标时进行绘制,释放时停止,再次按下鼠标时在新点开始绘制。有人能帮我用鼠标监听器(鼠标标记,…按下,…释放等)编码吗

}建议:

  • 首先,始终覆盖paintComponent,而不是paint
  • 并始终在覆盖范围内调用super的绘制方法
  • 这里有两个选项:
  • 备选案文1:
    • 创建一个
      ArrayList
      作为实例字段
    • 在鼠标/鼠标情感监听器中创建行并放入此列表
    • 然后调用repaint并在paintComponent方法中遍历该列表,即绘制线条
  • 备选案文2:
    • 创建一个BuffereImage作为实例字段
    • 在您的鼠标/鼠标中,情感监听器绘制到该图像上
    • 然后在paintComponent方法中绘制图像
  • 无论哪种方式,新行以mousePressed开始,以mouseReleased完成

有关这类绘图的两种常用方法的工作示例,请参见。示例绘制了一个矩形,但概念是相同的。谢谢,我会研究它。我没有想到在ArrayList实例中使用Line2D,我尝试过使用ArrayList,但没有得到我想要的结果。非常感谢。我会试试的!
    public class GraphicsPanel extends JPanel implements MouseMotionListener, MouseListener {

private Color color;
private JColorChooser cc;
private JComboBox paintToolBox;

Point pointStart = null;
Point pointEnd = null;

GraphicsPanel(JColorChooser cc, Color color, JComboBox paintToolBox) {
    this.cc = cc;
    this.color = color;
    this.paintToolBox = paintToolBox;
    addMouseMotionListener(this);

}

@Override
public void paint(Graphics g) {
    Graphics2D g2d = (Graphics2D) g;
    g2d.setColor(cc.getColor());
    Line2D line2D = new Line2D.Double(pointStart, pointEnd);

    if (pointStart != null || pointEnd != null) {
        g2d.draw(line2D);
    }
}

@Override
public void mouseDragged(MouseEvent e) {

}

@Override
public void mouseMoved(MouseEvent e) {

}

@Override
public void mouseClicked(MouseEvent e) {

}

@Override
public void mousePressed(MouseEvent e) {

}

@Override
public void mouseReleased(MouseEvent e) {

}

@Override
public void mouseEntered(MouseEvent e) {

}

@Override
public void mouseExited(MouseEvent e) {

}