删除形状后...我再也无法旋转.. - JavaFX

时间:2017-02-02 19:48:31

标签: list javafx rotation nodes shapes

我目前有一个程序可以在场景中添加矩形。可以选择,旋转,调整大小和删除它们。如果我选择一个矩形并单击旋转它可以工作,如果我添加另一个矩形并单击旋转它仍然有效。但是,如果我'删除''其中一个矩形然后我不能旋转另一个,或者任何其他添加的矩形。

我有以下字段和两种方法:

private List<Node> selectedShapes = new ArrayList<>();
private double angle[] = {0};

@FXML
private AnchorPane container2;

轮换:

public void rotateObject(ActionEvent event) throws IOException{
    angle[0] = angle[0] + 45;
    selectedShapes.get(0).setRotate(angle[0]);
} 

删除

 public void deleteButton(ActionEvent e) {
    deletebutton.setOnAction(a -> container2.getChildren().removeAll(selectedShapes));
    selectedShapes.remove(0);
}

我觉得我选择或删除所选形状的方式不正确。有人可以指导我选择当前项目的正确方法。因此,如果我删除其中一个矩形,另一个应该仍然可以旋转。感谢

1 个答案:

答案 0 :(得分:0)

你想创建一个矩形列表,所以不要直接使用基类Node,为什么不直接使用Rectangle / Shape列表:

List<Shape> selectedShapes = new ArrayList<>();

对于你的问题,你使用一个数组angle[],这个不能扩展,并且你只调用索引0,我明白(如果我没有记错)这个数组是存储每个Rectangle的角度来解决它也使用List:

List<Double> angle = new ArrayList<>();

最后发现你自己在你的列表中,使用你增加的int(在添加时)和减少(在删除时):

int Index = 0;

修改 以下是组织项目时可以遵循的简单方法:

private List<Rectangle> recs = new ArrayList<>();
private final double width = 50, height = 50;
private final double x = 200, y = 200;


public void add(){

    recs.add(new Rectangle(x, y, width, height));
    /*Properties of your rectangle (fill,shape...)*/

}

public void delete(int deleteIndex){

    /*Here the root is the container of your Rectangles*/
    root.getChildren().remove(recs.get(deleteIndex));
    recs.remove(deleteIndex);

}

public void rotate(int recIndex, double angle){

    recs.get(recIndex).setRotate(recs.get(recIndex).getRotate()+angle);

}
祝你好运!