我目前有一个程序可以在场景中添加矩形。可以选择,旋转,调整大小和删除它们。如果我选择一个矩形并单击旋转它可以工作,如果我添加另一个矩形并单击旋转它仍然有效。但是,如果我'删除''其中一个矩形然后我不能旋转另一个,或者任何其他添加的矩形。
我有以下字段和两种方法:
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);
}
我觉得我选择或删除所选形状的方式不正确。有人可以指导我选择当前项目的正确方法。因此,如果我删除其中一个矩形,另一个应该仍然可以旋转。感谢
答案 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);
}
祝你好运!