Wie dynamisch, control auto-resize-Komponenten in Java Swing
Erstellen einer neuen GUI in Java (1.8) Swing, ich bin auf der Suche nach einer Möglichkeit zum überschreiben der resize-Verhalten aller meiner Komponenten.
Lassen Sie mich erklären Ihnen einige bearbeitete Fotos:
1. Full-Screen GUI
Dies ist mein full-screen GUI, mit 3 Tafeln und eine JToolBar
. Die grünen braucht, um eine Feste Größedie andere wäre resizable.
Aktuell, ich habe nur 2 kleine GridLayout
zu organisieren (eine vertikale und eine horizontale grün-und cyan-Platten).
2. Kleine horizontale Größe
Wenn ich, zum Beispiel, reduzieren Sie die Bildgröße von der rechten Seite, ich will meine blau-und cyan-panel geändert nach der neuen Baugröße. Aber das grüne panel muss festen. (Nicht das schwierigste, denke ich.)
3. Minimale horizontale Größe
Dies ist der schwierigste Teil für mich. Sobald die cyan-Blaue (oder blau -) Bereich zu erreichen, ist mindestens eine Größe, ich will ihn "push" die grüne Platte nach Links, auch wenn es verschwindet aus dem Rahmen.
Natürlich ziehen den Rahmen nach rechts wird die grüne Platte wieder angezeigt.
Wie könnte ich es tun?
Ich daran gedacht, mit JSplitPane
oder einen bestimmten listener manuell entscheiden, das resize-Verhalten, aber ich brauche einige Ratschläge.
Leid, wenn Sie einen bereits bestehenden Beitrag Antworten kann, das ich nicht finden, eine Antwort, die erklären das Problem für mich.
Vielen Dank im Voraus!
Wenn Sie wollen mehr Beispiele, schauen Sie auf den "Evernote" - software, die Handlungen der gleichen Art und Weise
InformationsquelleAutor der Frage Kapcash | 2015-05-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einstellung der max/min/bevorzugte Größe von
Green
panel halten kann, das panel der gleichen Größe unter der ersten Bedingung. Um zu überprüfen, für die Größe, die Sie verwenden können, eineComponentListener
auf einem der anderenJPanel
's - wenn die Größe bekommt, die unterhalb einer bestimmten Breite, dann ändern Sie die max/min/bevorzugte Größe vonGreen
panel.Unten ist eine gehackte zusammen Beispiel dafür - es ändert sich die Größe der
Green
panel, wenn dieBlue
ist < 600, und die Größe ist eine gewichtete Größe (30% der gesamten Breite). Um die wahre L&F und daß Sie wünschen, die Sie haben können, um zu spielen mit dem layout/Größen.InformationsquelleAutor der Antwort copeg
Dies ist, wie ich es mache und ich bin nicht sicher, ob dies der richtige Weg:
Setzen Sie zuerst das layout auf null.
Als Nächstes erstellen Sie eine component resized Ereignis für Ihre Rahmen:
Innen hier können Sie manuell änderungen an den Komponenten, wie es geändert wird. Ich habe dies getan, für ein paar meiner Programme zu halten, ein scroll-Bereich auf der linken und rechten Seite des Rahmens immer die gleiche Breite haben und alles andere Größe oben und unten verkleinert.
InformationsquelleAutor der Antwort Forseth11
Dies sollte einfach mit einem GridBagLayout, vorausgesetzt, Sie setzen entsprechende Mindestgrößen für die grün-und cyan-Komponenten:
Indem ein Gewicht x für cyan-und blau-Komponenten sowie die Einstellung resize = HORIZONTALE Sie die Größe mit dem container.
InformationsquelleAutor der Antwort Durandal
Können Sie eine
BoxLayout
enthalten, die grün-und cyan-panel. EinBoxLayout
respektiert die minimale und maximale Größe einer Komponente. Also für das grüne panel legen Sie dann die maximale Größe gleich auf die gewünschte Größe und für die cyan-panel stellen Sie die minimale Größe gleich der bevorzugten Größe:Natürlich die richtige Lösung ist, überschreiben die
getMaximumSize()
undgetMinimumSize()
Methoden bzw. jedes panel, um einfach nur wieder die bevorzugte Größe des Panels.InformationsquelleAutor der Antwort camickr
Wichtige Folge ist:
Verwenden Sie diese Sequenz nach jeder Reihe von änderungen, die Sie getan haben in Ihrem code und sehen möchten, wie die Ergebnisse erscheinen auf dem Bildschirm.
Ich mag die java.das awt.GridBagLayout in Kombination mit der java.das awt.GridBagConstraints und ich dieses layout auf alle Container starten aus dem content-Bereich.
Wenn Sie einen container in einen anderen container verwenden Sie ein layout auf jedem von Ihnen, sonst wird die Berechnung schlägt fehl, weil eine fehlende layout in der Hierarchie.
InformationsquelleAutor der Antwort michbau