2017-02-01 3 views
0

Это мой ПЕРВЫЙ вопрос о Stack, поэтому любые советы, как это сделать в следующий раз, будут оценены :) Я создал список из пары Rectangles. Я пытаюсь просмотреть этот список, чтобы проверить пересечение прямоугольника в списке, а также перетащил и выпустил JLabbel на этом прямоугольнике. Вот мой подход:для цикла, чтобы проверить пересечение через ArrayList прямоугольников

public void mouseReleased(MouseEvent e) { 
    Component comp = (Component) e.getSource(); 
    Point locOnScreen = e.getLocationOnScreen(); 
    int x = locOnScreen.x - initialLocOnScreen.x + initialLoc.x; 
    int y = locOnScreen.y - initialLocOnScreen.y + initialLoc.y; 
    boundsSet(x, y, comp);//method to limit dragging space in contentPane 

    List<Rectangle> placeHolder = new ArrayList<Rectangle>(); 

    placeHolder.add(leftDesk); 
    placeHolder.add(leftPainting); 
    placeHolder.add(underBed); 
    placeHolder.add(onBed); 
    placeHolder.add(centerPainting); 
    placeHolder.add(window); 
    placeHolder.add(wardrobe); 

    for (Rectangle holder : placeHolder) { 
     if (holder.intersects(comp.getBounds())) { 

      JOptionPane.showMessageDialog(null, "Correct place !"); 
      GameStatus.points += 10; 
      GameStatus.nrOfItems--; 
      if (GameStatus.points == 50) 
       GameStatus.level++; 

     } else 
      comp.setLocation(initialLoc); 
    } 
} 

Я установил для Прямоугольников соответствующие координаты (проверено сотни раз). Проблема в том, что он обнаруживает только пересечение с первым прямоугольником в списке ... Если я перетащу ярлык на другой размещенный прямоугольник, он не обнаружит его. Есть идеи?

+0

Похоже, вы просто проверить его с одного прямоугольника не все из них. –

+2

'' .... так что любые советы, как сделать это лучше в следующий раз, будут оценены ... "' - пожалуйста, подумайте о создании и публикации действительного [mcve] или [SSCCE] (http://sscce.org) , –

+0

Вам действительно нужна ветка 'else'? Я не понимаю, почему он здесь. Кажется, это изменение позиции компонента после первой проверки. – Zefick

ответ

1

Я думаю, что вам нужно изменить цикл следующим образом:

boolean found = false; 

for (Rectangle holder : placeHolder) { 
    if (holder.intersects(comp.getBounds())) { 

     JOptionPane.showMessageDialog(null, "Correct place !"); 
     GameStatus.points += 10; 
     GameStatus.nrOfItems--; 
     if (GameStatus.points == 50) 
      GameStatus.level++; 
     found = true; 
     break; 
    } 
} 
if (!found) { 
    comp.setLocation(initialLoc); 
} 
+0

@ IQV уже решил мою проблему. Я только что положил заявление «else» в одной скобке раньше, чем должен был ... Спасибо, ребята, за быстрый ответ! – Baki1790