Aloha,
ich habe leider ein Problem wozu ich wieder theoretisch eine Lösung denke herstellen zu können... diese mir aber unnötig komplex erscheint.
Zum Problem:
Ich habe ein Panel in welchem ich Elemente derzeit im FlowLayout anordne (horizontales BoxLayout sollte auch gehen). Nun werden diesem Panel aber dynamisch zur Laufzeit neue Elemente (JLabels z.B.) hinzugefügt. Wenn das Panel nun "voll" ist würde ja standartmäßig einfach weiter hinten drangehongen und man würde erst sehen was da ist, wenn man das Panel vergrößert.
Alternativ könnte man natürlich Scrollbalken anbringen - beides ist aber bei mir nicht gewollt.
Ich würde wollen, dass es zu einem Zeilenumbruch kommt und die Elemente die nun dazu kommen in der nächsten Zeile angehongen werden.
Bsp (Punkte dienen nur zur Formatierung):
________
|.label....|
|_______|
und nun kommt noch eines hinzu -->
________
|.label.lab
|_______|
entstehen sollte aber
________
|.label....|
|.label....|
|_______|
Bisher habe ich beim rumspielen mit den Layouts dafür jedoch keine einfache Lösung gefunden, drum sehe ich momentan nur diese:
Immer wenn ein Element hinzugefügt wird, oder die Größe des Frames (und somit des Panels) geändert wird, wird eine Funktion aufgerufen.
Diese Funktion kennt alle Elemente die angezeigt werden sollen, und fügt so viele wie möglich in das Panel ein. Wenn "die Zeile" voll ist und noch Elemente übrig sind wird ein neues Panel und dem anderen erstellt und es wird wieder so vorgegangen.
Ein ähnliches vorgehen müsste man natürlich bei dem verkleinern der Panelfläche beachten.
Das ganze ist natürlich viel Rechnerei (Größe der Elemente wie JLabel und Panels vergleichen etc.) und es müssen laufend Elemente weggenommen und geadded werden, was bestimmt nicht für ein performantes Programm spricht (auch wenn das nicht das Problem sein sollte, wäre es doch unschön).
Gibt es da nicht eine Möglichkeit die bestehenden Layoutmanager zu nutzen, so das diese den "Zeilenumbruch" automatisch einfügen?
ich habe leider ein Problem wozu ich wieder theoretisch eine Lösung denke herstellen zu können... diese mir aber unnötig komplex erscheint.
Zum Problem:
Ich habe ein Panel in welchem ich Elemente derzeit im FlowLayout anordne (horizontales BoxLayout sollte auch gehen). Nun werden diesem Panel aber dynamisch zur Laufzeit neue Elemente (JLabels z.B.) hinzugefügt. Wenn das Panel nun "voll" ist würde ja standartmäßig einfach weiter hinten drangehongen und man würde erst sehen was da ist, wenn man das Panel vergrößert.
Alternativ könnte man natürlich Scrollbalken anbringen - beides ist aber bei mir nicht gewollt.
Ich würde wollen, dass es zu einem Zeilenumbruch kommt und die Elemente die nun dazu kommen in der nächsten Zeile angehongen werden.
Bsp (Punkte dienen nur zur Formatierung):
________
|.label....|
|_______|
und nun kommt noch eines hinzu -->
________
|.label.lab
|_______|
entstehen sollte aber
________
|.label....|
|.label....|
|_______|
Bisher habe ich beim rumspielen mit den Layouts dafür jedoch keine einfache Lösung gefunden, drum sehe ich momentan nur diese:
Immer wenn ein Element hinzugefügt wird, oder die Größe des Frames (und somit des Panels) geändert wird, wird eine Funktion aufgerufen.
Diese Funktion kennt alle Elemente die angezeigt werden sollen, und fügt so viele wie möglich in das Panel ein. Wenn "die Zeile" voll ist und noch Elemente übrig sind wird ein neues Panel und dem anderen erstellt und es wird wieder so vorgegangen.
Ein ähnliches vorgehen müsste man natürlich bei dem verkleinern der Panelfläche beachten.
Das ganze ist natürlich viel Rechnerei (Größe der Elemente wie JLabel und Panels vergleichen etc.) und es müssen laufend Elemente weggenommen und geadded werden, was bestimmt nicht für ein performantes Programm spricht (auch wenn das nicht das Problem sein sollte, wäre es doch unschön).
Gibt es da nicht eine Möglichkeit die bestehenden Layoutmanager zu nutzen, so das diese den "Zeilenumbruch" automatisch einfügen?