• title: JPanelにマウスで自由曲線を描画 tags: [JPanel, MouseListener, MouseMotionListener] author: aterai pubdate: 2005-12-19 description: マウスをドラッグしてパネル上に自由曲線を描画します。

概要

マウスをドラッグしてパネル上に自由曲線を描画します。

サンプルコード

class PaintPanel extends JPanel
                 implements MouseMotionListener, MouseListener {
  private Point startPoint = new Point(-10, -10);
  private Point p = new Point(-10, -10);
  public PaintPanel() {
    super();
    addMouseMotionListener(this);
    addMouseListener(this);
  }
  @Override public void paintComponent(Graphics g) {
    //super.paintComponent(g);
    Graphics2D g2d = (Graphics2D) g.create();
    g2d.setStroke(new BasicStroke(3f));
    g2d.setPaint(Color.BLACK);
    g2d.drawLine(startPoint.x, startPoint.y, p.x, p.y);
    g2d.dispose();
    startPoint = p;
  }
  @Override public void mouseDragged(MouseEvent e) {
    p = e.getPoint();
    repaint();
  }
  @Override public void mouseMoved(MouseEvent e)    {}
  @Override public void mouseExited(MouseEvent e)   {}
  @Override public void mouseEntered(MouseEvent e)  {}
  @Override public void mouseReleased(MouseEvent e) {}
  @Override public void mouseClicked(MouseEvent e)  {}
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、パネル上でマウスがドラッグされた場合、その軌跡を短い直線でつなぎ合わせることで、曲線を描画しています。

  • マウスがクリックされた場所を始点にする
  • ドラッグされた時の位置を終点にしてパネルをrepaint()
  • paintComponent(...)をオーバーライドして、上記の始点、終点で直線を描画
  • 次の直線のための始点を現在の終点に変更

参考リンク

コメント