@Override
  public void mouseReleased(MouseEvent me) {
    int x = me.getX();
    int y = me.getY();
    if (this.drawable != null) {
      // 最初の位置から変化があった場合のみmoveコマンドを実行する．
      if (!((x == this.startX) && (y == this.startY))) { 
        // undoができるようにmoveコマンドを生成して実行する．
        // undoした時にはドラッグの開始位置に戻すために，一旦，最初の位置まで戻して，moveコマンドを実行する．
        this.drawable.move(- (this.lastX - this.startX), - (this.lastY - this.startY));
        Command command = new CommandMove(this.canvas, this.drawable, 
            x - this.startX, y - startY);
        this.canvas.execute(command);
      }
    }
    // ドラッグは終了．
    this.drawable = null;
    this.updateCursorAt(x, y);
    // ポップアップメニューを出すべきかチェックする．
    if (me.isPopupTrigger()) {
      this.handlePopupTrigger(me);
    }
  }