Moin zusammen !
In der Regel (insbesondere bei Anwendungen) macht es ja Sinn die Layoutmanager die ganze Arbeit verrichten zu lassen und frei werdenden Platz vernünftig zu vergeben. In Einzelfällen aber, wenn einfach nicht mehr Platz benötigt wird weil es einach nicht mehr Daten zum anzeigen gibt macht es keinen Sinn z.B. Tabellen oder Listen mehr Platz zur Verfügung zu stellen. Als Beispiel sei hier z.B. erwähnt wenn man alte C64 Spiele wie z.B. Kaiser nachprogrammieren will.
Dennoch sollte man dem User die Möglichkeit geben möglichst den kompletten Bildschirm auszufüllen. Die Lösung wäre hier wie im TV Bereich je nach Größe des Fensters jedes einzelne Element entsprechend in der Größe und in der Position neu auszurichten so das es entweder in der Breite oder in der Höhe maximiert ist und überflüssigen Platz wie im TV bei abweichendem Bildformat mit schwarzen Balken abzugrenzen.
Ich habe es mit Hilfe absoluter Positionierung und abgeleiteter Node Klassen geschafft (siehe Screenshots). Der Code ist aber noch "sehr dreckig" daher spare ich mir hier vorerst Codeausschnitte, reiche diese aber bei Interesse gerne nach.
Kurz zur Umsetzung: Jede Node bekommt eine Default Größe und Position basierend auf der Auflösung für die programmiert wird zugewiesen.
Der Root Container ist eine Stack Pane, diese zentriert die ihr zugewiesene Pane. An der Width und Height Property der Scene wird ein ChangeListener registriert. Dieser berechnet einen Multiplikator um den die Pane in der Größe verändert wird. Nachdem dies geschehen ist werden alle in der Pane vorhanden Nodes entsprechend dem Multiplikator neu positioniert und in ihrer Größe angepasst, inkl. der Schriftgröße (je nach Node).
Funktioniert wie man an den Screenshots sehen kann prima, wobei ich noch nicht weiter ins Detail gegangen bin inwiefern meine Eingriffe eventuelle FX Features wie Animation oder Transformation beeinträchtigen.
Die schlechte Bildqualität liegt übrigens daran das ich aktuell nur mit png Files arbeite da diese zum testen schneller zu erstellen sind. In einer finalen Anwendung sollte natürlich wo immer möglich svg benutzt werden.
Nach langer Einleitung jetzt zur Intention dieses Beitrags: Bin gestern durch Zufall (ja ich bin noch in der FX Lernphase da kennt man noch nicht alles ) auf die boolean managed (von Node) sowie in diesem Zusammenhang auf die Methoden resize (von Region) und resizeRelocate (von Node) gestoßen. Für mich las sich das erstmal so das man hiermit genau das gleiche Ziel erreichen könnte. Trotz langer Nacht hatte ich aber keinen Erfolg.
Jetzt die finale Frage: Ist das von mir programmierte Verhalten mit JavaFX "Hausmitteln" umsetzbar oder Bedarf es so wie ich es gemacht habe für die Kalkulation der Position und Größe Handarbeit des Programmierers ?
Vielen Dank für eure Rückmeldung !
Grüße Ernesto95
In der Regel (insbesondere bei Anwendungen) macht es ja Sinn die Layoutmanager die ganze Arbeit verrichten zu lassen und frei werdenden Platz vernünftig zu vergeben. In Einzelfällen aber, wenn einfach nicht mehr Platz benötigt wird weil es einach nicht mehr Daten zum anzeigen gibt macht es keinen Sinn z.B. Tabellen oder Listen mehr Platz zur Verfügung zu stellen. Als Beispiel sei hier z.B. erwähnt wenn man alte C64 Spiele wie z.B. Kaiser nachprogrammieren will.
Dennoch sollte man dem User die Möglichkeit geben möglichst den kompletten Bildschirm auszufüllen. Die Lösung wäre hier wie im TV Bereich je nach Größe des Fensters jedes einzelne Element entsprechend in der Größe und in der Position neu auszurichten so das es entweder in der Breite oder in der Höhe maximiert ist und überflüssigen Platz wie im TV bei abweichendem Bildformat mit schwarzen Balken abzugrenzen.
Ich habe es mit Hilfe absoluter Positionierung und abgeleiteter Node Klassen geschafft (siehe Screenshots). Der Code ist aber noch "sehr dreckig" daher spare ich mir hier vorerst Codeausschnitte, reiche diese aber bei Interesse gerne nach.
Kurz zur Umsetzung: Jede Node bekommt eine Default Größe und Position basierend auf der Auflösung für die programmiert wird zugewiesen.
Der Root Container ist eine Stack Pane, diese zentriert die ihr zugewiesene Pane. An der Width und Height Property der Scene wird ein ChangeListener registriert. Dieser berechnet einen Multiplikator um den die Pane in der Größe verändert wird. Nachdem dies geschehen ist werden alle in der Pane vorhanden Nodes entsprechend dem Multiplikator neu positioniert und in ihrer Größe angepasst, inkl. der Schriftgröße (je nach Node).
Funktioniert wie man an den Screenshots sehen kann prima, wobei ich noch nicht weiter ins Detail gegangen bin inwiefern meine Eingriffe eventuelle FX Features wie Animation oder Transformation beeinträchtigen.
Die schlechte Bildqualität liegt übrigens daran das ich aktuell nur mit png Files arbeite da diese zum testen schneller zu erstellen sind. In einer finalen Anwendung sollte natürlich wo immer möglich svg benutzt werden.
Nach langer Einleitung jetzt zur Intention dieses Beitrags: Bin gestern durch Zufall (ja ich bin noch in der FX Lernphase da kennt man noch nicht alles ) auf die boolean managed (von Node) sowie in diesem Zusammenhang auf die Methoden resize (von Region) und resizeRelocate (von Node) gestoßen. Für mich las sich das erstmal so das man hiermit genau das gleiche Ziel erreichen könnte. Trotz langer Nacht hatte ich aber keinen Erfolg.
Jetzt die finale Frage: Ist das von mir programmierte Verhalten mit JavaFX "Hausmitteln" umsetzbar oder Bedarf es so wie ich es gemacht habe für die Kalkulation der Position und Größe Handarbeit des Programmierers ?
Vielen Dank für eure Rückmeldung !
Grüße Ernesto95