Рисование на JavaFX Canvas

Создал что-то по типу Paint'a на Canvas но столкнулся с проблемой - если слишком быстро вести курсор, то фигуры рисуются отрывчато:

демонстрация проблемы

Можно ли это исправить, чтобы линия была без пробелов, как в Paint'e? Реализация рисования:

canvas.setOnMousePressed(mouseEvent -> {//логика рисования
    gc.setFill(cp.getValue());//определям цвет

    if(brushType.equals("Square")) {
        gc.fillRect(mouseEvent.getX()-brushSize, mouseEvent.getY()-brushSize, brushSize, brushSize);//рисуем

        canvas.setOnMouseDragged(mouseEvent1 -> gc.fillRect(mouseEvent1.getX()-brushSize, mouseEvent1.getY()-brushSize, brushSize, brushSize));//рисуем, если курсор двинулся
    }
    else if(brushType.equals("Circle")){
        gc.fillOval(mouseEvent.getX()-brushSize, mouseEvent.getY()-brushSize, brushSize, brushSize);//рисуем

        canvas.setOnMouseDragged(mouseEvent1 -> gc.fillOval(mouseEvent1.getX()-brushSize, mouseEvent1.getY()-brushSize, brushSize, brushSize));//рисуем, если курсор двинулся
    }
});

Ответы (1 шт):

Автор решения: dikiy_opezdal

Помогло добавление отдельного кода, в котором при движении мыши рисуется линия от прошлого положения курсора к следующему:

canvas.setOnMouseDragged(mouseEvent1 -> {
    gc.lineTo(mouseEvent1.getX(), mouseEvent1.getY());

    gc.stroke();

    gc.moveTo(MouseDragEvent.getX(), MouseDragEvent.getY());
});//рисуем, если курсор двинулся

Вот как реализовал в програме:

canvas.setOnMousePressed(mouseEvent -> {//логика рисования
    gc.setFill(cp.getValue());//определям цвет
    gc.setStroke(cp.getValue());
    gc.setLineWidth(brushSize);//определяем размер

    if(brushType.equals("Square")) {
        gc.fillRect(mouseEvent.getX()-brushSize, mouseEvent.getY()-brushSize, brushSize, brushSize);//рисуем
    }
    else if(brushType.equals("Circle")){
        gc.fillOval(mouseEvent.getX()-brushSize, mouseEvent.getY()-brushSize, brushSize, brushSize);//рисуем
    }
    else if(brushType.equals("Pencil")) {
        canvas.setOnMouseDragged(mouseEvent1 -> {
            gc.lineTo(mouseEvent1.getX(), mouseEvent1.getY());

            gc.stroke();
        });//рисуем, если курсор двинулся
    }

    gc.moveTo(mouseEvent.getX(), mouseEvent.getY());//обновляем положение курсора, чтобы при следующем нажатии мыши не было лишней линии
});
→ Ссылка