# Simple Kollisionskontrolle zweier jLabels



## so_ein_Komischer (23. Aug 2015)

Hallo 
Ich bin noch ziemlich Java Einsteiger und programmiere gerade an einem kleinen Spiel.
Ohne viel drumherum gesagt: Ich muss oft eine Kollisionskontrolle zwischen 2 jLabels machen.
Natürlich kann man es auch über eine lange If-Bedingung erreichen doch bei den vielen Labels die ständig überprüft werden müssen, gibt es doch sicher eine einfachere Lösung, zB eine Methode der man die beiden Labels übergibt und die einen Boolean zurückgibt.

Falls ihr mir helfen könnt, währ es nett wenn ihr es mir mithilfe eines kleinen Codesegments eure Lösungen präsentieren könntet. Vielen Dank im Voraus, so_ein_Komischer


----------



## RalleYTN (23. Aug 2015)

Benutze die Klasse Rectangle. dem Konstruktor vom Rectangle übergibst du die X und Y Koordinate deines JLabels und die Breite und Höhe. Das machst du mit allen JLabels. Wenn sich deine JLabels bewegen musst dem Rectangle über die Methode move() ebenfalls sagen, dass es sich bewegen soll und wenn du überprüfen willst ob sich beide überschneiden musst du bloß die Methode intersects(Rectangle rect) aufrufen. Das sieht dann ungefähr so aus:

```
List<JLabel> labels = new ArrayList<JLabel>();
// Hier alle JLabels der List hinzufügen
List<Rectangle> rects = new ArrayList<Rectangle>();
// Hier alle Rectangles hinzufügen
for(int i1 = 0; i1 < rects.size(); i1++) {

    for(int i2 = 0; i2 < rects.size(); i2++) {

        if(rects.get(i1).intersects(rects.get(i2))) {

            System.out.printf("Label %d kollidiert mit Label %d\n", i1, i2);
        }
    }
}
```


----------



## so_ein_Komischer (23. Aug 2015)

RalleYTN hat gesagt.:


> Benutze die Klasse Rectangle. dem Konstruktor vom Rectangle übergibst du die X und Y Koordinate deines JLabels und die Breite und Höhe. Das machst du mit allen JLabels. Wenn sich deine JLabels bewegen musst dem Rectangle über die Methode move() ebenfalls sagen, dass es sich bewegen soll und wenn du überprüfen willst ob sich beide überschneiden musst du bloß die Methode intersects(Rectangle rect) aufrufen. Das sieht dann ungefähr so aus:
> 
> ```
> List<JLabel> labels = new ArrayList<JLabel>();
> ...



Erstmal vielen Dank, aber bei mir funktioniert etwas nicht ganz. Vermutlich habe ich einen Fehler bei der Übergabe der Labels gemacht? kA.... 
Könntest du dein Beispiel bitte um 2 Labels mit den dazugehörigen Werten erweitern? Vielen Danke, so_ein_Komischer


----------



## RalleYTN (24. Aug 2015)

```
JLabel label = new JLabel(new ImageIcon(myimage1));
component.add(label);
Rectangle rect1 = new Rectangle(label.getX(), label.getY(), label.getWidth(), label.getHeight());
JLabel label2 = new JLabel(new ImageIcon(myimage2));
component.add(label2);
Rectangle rect2 = new Rectangle(label2.getX(), label2.getY(), label2.getWidth(), label2.getHeight());
if(rect1.intersects(rect2)) {
    System.out.println("KOLLISION");
}
```


----------



## so_ein_Komischer (24. Aug 2015)

RalleYTN hat gesagt.:


> ```
> JLabel label = new JLabel(new ImageIcon(myimage1));
> component.add(label);
> Rectangle rect1 = new Rectangle(label.getX(), label.getY(), label.getWidth(), label.getHeight());
> ...



ViiiiLEN Dank, genau das habe ich mir vorgestellt, funktioniert super


----------



## RalleYTN (24. Aug 2015)

gern geschehen. Allerdings solltest du dir nochmal die Forumsregeln durchlesen. erst intensiv googlen dann nachfragen.


----------

