Überschneidung von Panels umgehen

Status
Nicht offen für weitere Antworten.

Nothan

Neues Mitglied
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:

attachment.php


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!
 

Anhänge

  • umbiegen.jpg
    umbiegen.jpg
    4,2 KB · Aufrufe: 52

SvenK

Aktives Mitglied
Wenn es wirklich nur darum geht, das bestimmt Panels immer im Vordergrund, andere aber immer in Hintergrund sein sollen, dann solltest du dir mal JLayeredPane anschauen.

Komponenten, die man dieser Pane hinzufügt, kann man eine Position mitgeben, in der sie gezeichnet werden soll.
[highlight=Java]
JLayeredPane lp = new JLayeredPane();
lp.add(panel1, 0);
lp.add(panel2, 1);
lp.add(panel3, 2);
[/highlight]
Position 0 bedeutet sozusagen "ganz oben", 1 dann in der nächsten Ebene usw. In diesem Fall würden also bei Überschneidungen Panel2 und Panel3 von Panel1 überlagert werden. Panel2 würde wiederum Panel3 überlagern.

Du würdest also deine Panels, die nie überdeckt werden sollen, alle in Ebene 0 adden.

Zusätzlich kannst du zur Laufzeit mit lp.setComponentZOrder( Komponente, Position) die Ebene einer Komponente ändern.


Vielleicht hilft dir das als Hinweis
 

Nothan

Neues Mitglied
Hallo!

Erstmal vielen Dank für deine schnelle Antwort!

Der Ansatz sieht interessant aus, ist aber leider nicht genau das, was ich suche- ich möchte die grünen/bzw. gelben Panels wie auf der Skizze angedeutet um die blauen (unantastbaren) Panels herumlaufen lassen.

Sollte sich das Problem nicht klären lassen (was ich nicht hoffe)- werde ich auf deinen Vorschlag zurückgreifen, vielen Dank nochmal für den Ratschlag!

Es ist auf jeden Fall besser, die untergeordneten Panels hinter den wichtigen zu verstecken, als diese zu überdecken...
 

SvenK

Aktives Mitglied
Hallo!
Es ist auf jeden Fall besser, die untergeordneten Panels hinter den wichtigen zu verstecken, als diese zu überdecken...
Und wieso ist das besser? Irgendwie hab ich die Problematik wohl noch nicht ganz verstanden ???:L

Edit: jetzt hab ich glaube gerafft. Was du brauchst wäre also ein Polygon (java.awt.Polygon)

Du berechnest die Schnittpunkte wie gehabt und fügst dem Polygon dann soweit Punkte hinzu, dass es um das "Fass-mich-nich-an"-Panel drum herumläuft.
 
Zuletzt bearbeitet:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Luk10 Überschneidung von Image und Background AWT, Swing, JavaFX & SWT 7
G Überschneidung von Komponenten und Listener AWT, Swing, JavaFX & SWT 4
H Mehrere Panels auf JFrame AWT, Swing, JavaFX & SWT 8
I GUI, das verschiedene Panels hat (Von Seite zu Seite navigieren) AWT, Swing, JavaFX & SWT 7
G LayoutManager Panels anordnen über Schleifenvariablen AWT, Swing, JavaFX & SWT 7
B Bounds aller Panels aktualisieren AWT, Swing, JavaFX & SWT 0
B veränderte Größe eines Panels im Vorhinein wissen? AWT, Swing, JavaFX & SWT 1
L Komponenten eines Panels werden erst nach Klick darauf angezeigt AWT, Swing, JavaFX & SWT 13
L Swing Panels bewegen wie Windows 10 Kacheln AWT, Swing, JavaFX & SWT 0
G LayoutManager Beliebige Anzahl von Panels für LayoutManager AWT, Swing, JavaFX & SWT 3
T Swing Bug: mehrfache Panels bei Mouseover? AWT, Swing, JavaFX & SWT 11
P Zwischen verschiedenen Panels wechseln AWT, Swing, JavaFX & SWT 3
F abgeleitete Panels von einem ContentPanel AWT, Swing, JavaFX & SWT 4
K Event Handling Über JMenuBar die diversen Panels anzeigen AWT, Swing, JavaFX & SWT 10
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
F AWT mehrere Panels in einem Frame AWT, Swing, JavaFX & SWT 17
R Swing panels nebeneinander mit BoxLayout.X_AXIS AWT, Swing, JavaFX & SWT 4
P Swing Panels Wechseln AWT, Swing, JavaFX & SWT 9
D Swing Komponenten Anordnung eines Panels in Verbindung eines weiteren Panels AWT, Swing, JavaFX & SWT 9
R KeyListener in mehreren Panels AWT, Swing, JavaFX & SWT 5
H zwei gleich große Panels getrennt durch ein weiteres Panel AWT, Swing, JavaFX & SWT 10
Thallius Swing Mehrere tausend "Panels" erstellen AWT, Swing, JavaFX & SWT 3
P Drag & Drop zwischen Panels AWT, Swing, JavaFX & SWT 0
V AWT Panels überlappen AWT, Swing, JavaFX & SWT 1
K Panels mit eigenen Controllern in Main-View einbauen AWT, Swing, JavaFX & SWT 4
U Swing Panels im Contentpane durchschalten AWT, Swing, JavaFX & SWT 1
M Handling 1 Fenster mehrere Panels AWT, Swing, JavaFX & SWT 2
S Swing Plätze von 2 panels vertauschen AWT, Swing, JavaFX & SWT 4
T Panels mit Button verbinden AWT, Swing, JavaFX & SWT 3
F Swing Wie verwalte ich meine Panels richtig? AWT, Swing, JavaFX & SWT 2
Q CardLayout, ausgelagerte Panels, ActionListener AWT, Swing, JavaFX & SWT 5
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
D Stapelung von Panels AWT, Swing, JavaFX & SWT 6
V Swing MouseEvents bei gestapelten Panels AWT, Swing, JavaFX & SWT 2
B JApplet zwei Panels autobreite? AWT, Swing, JavaFX & SWT 2
kodela Teil eines Panels als Graphik speichern AWT, Swing, JavaFX & SWT 3
Kenan89 LayoutManager MigLayout Positionierung von Panels AWT, Swing, JavaFX & SWT 4
A Panels in JavaFX zur Laufzeit erzeugen AWT, Swing, JavaFX & SWT 5
D JButton-Click in JList mit Panels (auf dem der Button ist) AWT, Swing, JavaFX & SWT 6
L Mehre Panels einen Frame zuweisen AWT, Swing, JavaFX & SWT 11
F Panels über buttons zu anderen Panels hinzufügen AWT, Swing, JavaFX & SWT 2
X Swing Resizing der Komponenten innheralb eines Panels AWT, Swing, JavaFX & SWT 2
J Problem mit der Höhe eines Panels AWT, Swing, JavaFX & SWT 11
M Swing JTabbedPane Panels deaktivieren AWT, Swing, JavaFX & SWT 2
S Swing (Nicht) Vergrößern von Panels AWT, Swing, JavaFX & SWT 3
S Drag and Drop über 2 Panels AWT, Swing, JavaFX & SWT 2
B LayoutManager Zeilenweise Anordnung von Panels AWT, Swing, JavaFX & SWT 19
B Panels wechseln auf Knopfdruck AWT, Swing, JavaFX & SWT 17
N Hilfe bei Panels! AWT, Swing, JavaFX & SWT 11
J LayoutManager Panels übereinander AWT, Swing, JavaFX & SWT 3
P Von einem Panel auf die Objekte des anderen Panels zugreifen AWT, Swing, JavaFX & SWT 3
C Aufklappbare Panels AWT, Swing, JavaFX & SWT 2
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
D Vererbung von Panels AWT, Swing, JavaFX & SWT 8
E Wie Breite und Höhe eines Panels festlegen? AWT, Swing, JavaFX & SWT 5
B Panels stapeln, geht das? AWT, Swing, JavaFX & SWT 7
I 2 Panels übereinander, 1 transparent AWT, Swing, JavaFX & SWT 2
S GridBagLayout Panels AWT, Swing, JavaFX & SWT 2
W Panels vertikal anordnen AWT, Swing, JavaFX & SWT 10
R Swing Kommunikation zwischen Panels AWT, Swing, JavaFX & SWT 2
F Abschaltbare Panels AWT, Swing, JavaFX & SWT 5
aze Layout auf Teil eines Panels anwenden AWT, Swing, JavaFX & SWT 5
M Swing Alle Elemente eines Panels? AWT, Swing, JavaFX & SWT 9
I Swing Positionieren von Panels mit layoutManager AWT, Swing, JavaFX & SWT 6
B Java Grafiken an bestimmter Positon des Panels anzeigen AWT, Swing, JavaFX & SWT 6
S import von Klassen (zwei Panels eine Form) AWT, Swing, JavaFX & SWT 39
K Zwei Panels zentriert anordnen AWT, Swing, JavaFX & SWT 3
H2SO3- AWT seltsammes verhalten eines Panels AWT, Swing, JavaFX & SWT 9
S Buttons, Panels etc. zu einer Teilkomponente hinzufügen AWT, Swing, JavaFX & SWT 5
S mehere panels übereinander AWT, Swing, JavaFX & SWT 2
Z Swing Gif's in panels einfügen AWT, Swing, JavaFX & SWT 11
D java.lang.IllegalArgumentException beim Darstellen eines Panels AWT, Swing, JavaFX & SWT 7
T Border eines Panels nicht an der rechten Kante anzeigen AWT, Swing, JavaFX & SWT 7
F name des panels in der ein button liegt rausfinden AWT, Swing, JavaFX & SWT 10
R AWT: Aufteilung mit Panels? AWT, Swing, JavaFX & SWT 2
L Focus für KeyListener auf verschiedene Panels AWT, Swing, JavaFX & SWT 2
G Ein Frame mit mehreren austauschbaren Panels AWT, Swing, JavaFX & SWT 3
I Applet mit Panels (so richtig, gehts besser?) AWT, Swing, JavaFX & SWT 3
G designfrage zu 2 panels AWT, Swing, JavaFX & SWT 2
hdi zeitgleiches fokusieren von zwei panels AWT, Swing, JavaFX & SWT 2
G 2 Panels, 2 Listener, 1 Problem AWT, Swing, JavaFX & SWT 2
G Im applet auf panels zeichnen AWT, Swing, JavaFX & SWT 9
G Im Applet Panels anzeigen lassen AWT, Swing, JavaFX & SWT 2
G Editierbarkeit aller Komponenten eines Panels AWT, Swing, JavaFX & SWT 5
R Kleine Panels auf einem großen Panel frei platzieren AWT, Swing, JavaFX & SWT 11
G Remove Panels von JFrame AWT, Swing, JavaFX & SWT 5
M Ausrichtung eines Panels AWT, Swing, JavaFX & SWT 7
H Frames oder Panels für mehrere Ansichten? AWT, Swing, JavaFX & SWT 4
M Problem mit Cursor für Panels AWT, Swing, JavaFX & SWT 4
Kidao Mehrer Panels, mit Buttons in einem Frame abwechselnd laden? AWT, Swing, JavaFX & SWT 3
M Hallo Herr Uhres, Frage zu DND_Demo: Ausrichten der Panels:) AWT, Swing, JavaFX & SWT 4
O Panels ein und ausblenden - geht das? AWT, Swing, JavaFX & SWT 3
O eine Frage zu Panels AWT, Swing, JavaFX & SWT 10
M Problem bei Repaint von Panels AWT, Swing, JavaFX & SWT 2
M Größe des Panels ändern? AWT, Swing, JavaFX & SWT 3
O haben panels von anfang an einen dummen rand? AWT, Swing, JavaFX & SWT 19
G Zwischen Panels in einem JFrame wechseln AWT, Swing, JavaFX & SWT 4
M JTree und Anzeige des entsprechenden Panels AWT, Swing, JavaFX & SWT 5
M JList mit unbestimmter Anzahl Panels füllen AWT, Swing, JavaFX & SWT 4
K 2 Panels und Layouts AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben