我正在使用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。
答案 0 :(得分:0)
如果您希望能够撤消操作,则需要存储“绘图”的状态。
在您的情况下,撤消Arrow元素的创建将是简单的rootPane.getChildren()。remove(arrow);
您只需要创建一个数据结构,即可在其中存储用户(或至少几个)执行的所有操作。而且每个动作都可以撤消。
示例:
ActionType.Add->操作:getChildren()。add(xyz)->反向:getChildren()。remove(xyz)
ActionType.Move-> arrow.setEndX(evt.getX())-> arrow.setEndX(oldX)
每个动作都应包含所有必要的信息以将其撤消。 (所涉及的节点,完成的操作以及之前的操作)