Javafx Как отменить фигуру рисунков на другой фигуре - PullRequest
0 голосов
/ 31 декабря 2018

Я использую скриншот с помощью javafx, например, lightshot.Я сделал почти все функции, но теперь я застрял в операции отмены.Я добавляю свободное рисование, стрелки линий, прямоугольники и т. Д. На прямоугольник следующим образом:

selection.setCursor(Cursor.CROSSHAIR);
            Arrow arrow = new Arrow();
            selection.setOnMousePressed((evt) -> {

                rootPane.getChildren().remove(arrow);
                arrow.setStartX(evt.getX());
                arrow.setStartY(evt.getY());
                arrow.setEndX(evt.getX());
                arrow.setEndY(evt.getY());
                arrow.setStyle("-fx-background-color:red");
                rootPane.getChildren().add(arrow);

            });

            selection.setOnMouseDragged((evt) -> {
                arrow.setEndX(evt.getX());
                arrow.setEndY(evt.getY());
            });
            selection.setOnMouseReleased((evt) -> {

                arrow.setEndX(evt.getX());
                arrow.setEndY(evt.getY());
            });

            drawtype = "arrow";
        });

Выделение - это нарисованный мною прямоугольник, это пример того, как я добавляю стрелку.Я пытался исследовать онлайн, но, похоже, я не могу найти что-то, чтобы указать мне правильное направление, кто-нибудь, кто может помочь здесь, пожалуйста?Помните, я не использую Canvas или GraphicsContext.

1 Ответ

0 голосов
/ 02 января 2019

Если вы хотите иметь возможность отменить действия, вам нужно сохранить состояние вашего «чертежа».

В вашем случае отмена создания вашего элемента Arrow будет простой rootPane.getChildren () .remove (стрелка);

Вам просто нужно создать структуру данных, в которой будут храниться все действия, выполненные пользователем (или хотя бы несколько).И каждое действие может быть отменено.

Пример:

ActionType.Add -> action: getChildren (). Add (xyz) -> reverse: getChildren (). Remove (xyz)

ActionType.Move -> arrow.setEndX (evt.getX ()) -> arrow.setEndX (oldX)

Каждое действие должно содержать всю информацию, необходимую для его отмены.(Вовлеченный узел, что было сделано и как это было раньше)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...