2017-02-02 2 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

Вы хотите создать список Rectangle, поэтому вместо того, чтобы идти через базовый класс Node почему бы не использовать список Прямоугольник/Форма непосредственно:

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

И для вашей проблемы, вы используете массив angle[], это не может быть расширен, и вы вызываете только индекс 0, я понимаю (если я не ошибаюсь), что этот массив для хранения угла каждого Rectangle решить ее использует список там тоже:

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

A Н.Д., наконец, найти себя в списке, использует Int, что вы приращения (в момент добавления) и декремента (во время удаления):

int Index = 0; 

Edit: Вот простые методы что вы можете следить за организацией своего проекта:

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

Эй, спасибо за ваш ответ. Итак, как бы написать это в моем методе rotate/delete. Спасибо – TheBeliever12

+0

Мой ответ отредактирован! –

+0

Мне просто пришлось использовать ваш метод удаления, и это заставило его работать именно так, как я хотел! Большое спасибо Бо! – TheBeliever12

Смежные вопросы