Hallo allerseits!
Ich stehe seit einer Weile vor einem Problem, an dem ich mitlerweile fast verzweifle und hoffe darauf, hier einen Denkanstoß zu finden. Google und die Forensuche habe ich bereits bemüht- leider erfolglos.
Worum es mir geht:
Ich habe eine Zeichenfläche, auf der liegen Panels, die sich ruhig überlappen dürfen.
Nun gibt es aber eine andere Art Panels, die die ersten Panels eben nicht überlappen dürfen und "Darum herum" gebogen werden müssen.
Da das etwas umständlich zu erklären ist, habe ich mal eine Grafik erstellt:
Die blauen Panels sind die, die nicht überlappt werden dürfen, die grünen müssen sie verbinden, dürfen sie aber eben nicht überlappen.
Gelb markiert ist das Ergebnis, welches ich mir wünsche.
Ich habe schon vieles probiert, bin aber leider zu keinem Ergebnis gekommen, welches mir gefällt. Überschneidungen kann ich problemlos feststellen, aber wie ich dann weiter verfahren soll, weiß ich leider nicht.
Im Moment ist das größte, was ich zustande bekomme, das betreffende Panel einfach nicht auf die Zeichenfläche hinzuzufügen, oder einzufärben, aber ich bekomme es nicht dazu, diesen Umweg zu nehmen.
Jetzt mal ein wenig Code um das Problem zu veranschaulichen:
So stelle ich die Überschneidungen fest:
Das ganze durchlaufe ich in Schleife und es funktioniert einwandfrei- wie erwähnt, das erkennen der Überschneidungen ist nicht das Problem.
Mein Problem ist, wie bringe ich das Panel nun dazu die Problemstelle zu umgehen? Mit einem Panel allein wird es wohl kaum funktionieren, ein Ansatz, den ich ausprobiert habe, baut auf intersection auf:
Und dann an entsprechender Stelle setBounds für das Panel mit der Überschneidung mit eben diesen Rechteck, aber aus irgend einem Grund funktioniert das leider nicht richtig.
Jetzt hoffe ich auf eure Hilfe:
Hat jemand schonmal ein ähnliches Problem gehabt, oder erkennt jemand meinen Denkfehler?
Ich brauche nicht wirklich fertigen Code, sondern einen Denkansatz, wie ich aus einem Panel, dass sich mit einem anderen Überschneidet, mehrere machen kann, die darum herum laufen.
Ich hoffe mal, dass ich mich wenigstens halbwegs verständlich ausgedrückt habe und bedanke mich schonmal im Vorraus für eure Aufmerksamkeit und Hilfe!
Ich stehe seit einer Weile vor einem Problem, an dem ich mitlerweile fast verzweifle und hoffe darauf, hier einen Denkanstoß zu finden. Google und die Forensuche habe ich bereits bemüht- leider erfolglos.
Worum es mir geht:
Ich habe eine Zeichenfläche, auf der liegen Panels, die sich ruhig überlappen dürfen.
Nun gibt es aber eine andere Art Panels, die die ersten Panels eben nicht überlappen dürfen und "Darum herum" gebogen werden müssen.
Da das etwas umständlich zu erklären ist, habe ich mal eine Grafik erstellt:
Die blauen Panels sind die, die nicht überlappt werden dürfen, die grünen müssen sie verbinden, dürfen sie aber eben nicht überlappen.
Gelb markiert ist das Ergebnis, welches ich mir wünsche.
Ich habe schon vieles probiert, bin aber leider zu keinem Ergebnis gekommen, welches mir gefällt. Überschneidungen kann ich problemlos feststellen, aber wie ich dann weiter verfahren soll, weiß ich leider nicht.
Im Moment ist das größte, was ich zustande bekomme, das betreffende Panel einfach nicht auf die Zeichenfläche hinzuzufügen, oder einzufärben, aber ich bekomme es nicht dazu, diesen Umweg zu nehmen.
Jetzt mal ein wenig Code um das Problem zu veranschaulichen:
So stelle ich die Überschneidungen fest:
Code:
public Boolean detectCollosions (Rectangle r1, Rectangle r2){
if(r1.intersects(r2)){
System.out.println("Überschneidung!");
return true;
}
if(r2.intersects(r1)){
System.out.println("Überschneidung!");
return true;
}
Das ganze durchlaufe ich in Schleife und es funktioniert einwandfrei- wie erwähnt, das erkennen der Überschneidungen ist nicht das Problem.
Mein Problem ist, wie bringe ich das Panel nun dazu die Problemstelle zu umgehen? Mit einem Panel allein wird es wohl kaum funktionieren, ein Ansatz, den ich ausprobiert habe, baut auf intersection auf:
Code:
if(r1.intersects(r2)){
interSectionRect = r1.intersection(tempRect);
}
if(r2.intersects(r1)){
interSectionRect = r1.intersection(tempRect);
}
int width= (int)interSectionRect.getMinX() - (int)r1.getMinX();
int height= (int)interSectionRect.getMinY() - (int)r1.getMinY();
r1.setSize(width, height);
}
return r1;
Und dann an entsprechender Stelle setBounds für das Panel mit der Überschneidung mit eben diesen Rechteck, aber aus irgend einem Grund funktioniert das leider nicht richtig.
Jetzt hoffe ich auf eure Hilfe:
Hat jemand schonmal ein ähnliches Problem gehabt, oder erkennt jemand meinen Denkfehler?
Ich brauche nicht wirklich fertigen Code, sondern einen Denkansatz, wie ich aus einem Panel, dass sich mit einem anderen Überschneidet, mehrere machen kann, die darum herum laufen.
Ich hoffe mal, dass ich mich wenigstens halbwegs verständlich ausgedrückt habe und bedanke mich schonmal im Vorraus für eure Aufmerksamkeit und Hilfe!