2017-02-02 14 views
0

我目前有一个程序,我可以在场景中添加矩形。这些可以选择,旋转,调整大小和删除。如果我在矩形上选择并单击旋转,它将起作用,如果我添加另一个矩形并单击旋转,它仍然可以工作。但是,如果我'删除'其中一个矩形,那么我不能旋转另一个,或者再添加任何其他的。删除形状后..我无法旋转.. - JavaFX

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

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

你想创建一个矩形列表,这样反而通过基类Node去,为什么不直接使用矩形/形状的名单:

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

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

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

A ND终于找到自己在列表中,使用你增加一个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); 

} 

祝你好运!

+0

嘿,谢谢你的回复。那么我怎么会在我的旋转/删除方法中写这个。谢谢 – TheBeliever12

+0

我的回答已被编辑! –

+0

我只是不得不使用你的删除方法,并使其工作正是我想要的!非常感谢博! – TheBeliever12