JavaFX Custom Layout

Times

Bekanntes Mitglied
Hallo,

ich bin noch ganz neu in der FX-Welt und habe nun langsam begonnen die FX-Komponenten meinen Erwartungen anzupassen (Habe alle Komponenten überschrieben um so u.a. Standardfonts zu setzen, Konstruktoren hinzugefuegt um bei Buttons direkt ein ActionEvent mit zu übergeben, Multi-Language Support etc.).
All dies gibt es auch so bereits in Swing aber wollte dann doch demnächst auf FX umsteigen, doch es stellt sich ein kleines Problem in meinen Weg.

In Swing habe ich durch eine Implementierung von "LayoutManager2" mein eigenes Layout erstellt, und damit meine Anwendungen mit FX auch wieder funktionieren, müsste ich diesen nach FX umsetzen.

Habe mir div. bestehende Layouts angeschaut und gesehen das diese alle von Pane erben. So find ich dann auch mal an aber von dort an komme ich nicht wirklich weiter.
Habe angefangen eine eigene add Methode hinzuzufügen, mit welcher die Komponenten (Control/Node -> habe beides probiert.. !) zum Pane hinzugefügt werden aber von dort an habe ich zum einen das Problem das ich nicht an die Grösse des Panes komme, also nicht zu dieser Zeit und zum anderen finde ich keine Möglichkeit an die Standard-Höhen der einzelnen Elemente zu gelangen.
In Swing habe ich dafür getPreferredSize für Container-Komponenten und getFontSize + Offset für Text/Button/Label Komponenten genutzt, aber diese Attribute stehen zu jener Zeit entweder auf 0/-1 oder es gibt diese nicht.

Gehe ich das ganze falsch an? Welche Methode muss ich überschreiben damit ich die Positionierung der Komponenten übernehmen kann?

Danke
 
Swing und JavaFX sind 2 Unterschiedliche UI Frameworks daher ist es nicht so einfach das von einem zum anderen zu übertragen 😉
Hier mal eine Liste mit Unterschieden: http://www.dummies.com/how-to/content/10-differences-between-javafx-and-swing.html
(vor allem der Punkt mit den Layouts)

Hier ein Link der etwas auf die Größen und Ausrichtung der Nodes eingeht
http://docs.oracle.com/javafx/2/layout/size_align.htm

In Swing habe ich durch eine Implementierung von "LayoutManager2" mein eigenes Layout erstellt, und damit meine Anwendungen mit FX auch wieder funktionieren, müsste ich diesen nach FX umsetzen.

Was konnte dein "LayoutManager2" magisches was du in JavaFX realisieren willst?
Möglicherweise kann man dir eine Alternative zeigen.
 
Hey,

also ich wollte wieder mein eigenes Layout verwenden, da ich damit viel besser zurecht komme als mit gewöhnlichen Layouts. Vorteile daran sind, das ich es nach meinen Wünschen erweitern kann und mir somit alles offen ist.

Hier einige Punkte die dies mit sich bringt:
  • Ein Layout für 95+% (für meine Ansprüche) Fälle.
  • Layout "Komponenten" Platzierungen werden nach Reihenfolge im Code positioniert.
    Hier sagen einige bestimmt das das total ineffizient ist, doch es gibt immer wieder Fälle in denen Kunden auf einen zu kommen und mal eben ganze Teile im Programm verschoben haben möchten. Gesagt getan, fix ein paar Zeilen Code umkopieren und fertig. Keine Anpassungen von irgendwelchen Werten.. es bleibt wie es ist, nur das die Reihenfolge verändert wird.
  • Schlicht und einfach:
    Wieder ein Vorteil und ein Nachteil zugleich. Es sieht nicht super toll aus und es funkelt nicht an allen Ecken und Enden, aber es ist praktisch. Da ich sehr viel mit Datenbanken zu tun haben und somit zB. Stammdaten-Pflege "Formulare" habe welche sich andauernd nach Kundenwünschen ändern ist dies einfacher für mich handzuhaben.
Also klar es gibt immer Vor-/ und Nachteile bei allen möglichen Layouts.. aber der Hauptgrund das ich dieses verwende ist das ich nicht n Layouts miteinander vermischen will, da dies bei Änderungen dann doch schon etwas mehr Aufwand mit sich bringt.

Erledigt:

Habe dann doch den richtigen Weg gefunden. Ich war schon nah dran mit dem Pane.
Also es wird von Pane geerbt und dann die layoutChildren() Methode überschrieben.
Von hier aus kann ich dann auch die Pane Grösse mittels getWidth() / getHeight() sowie die Control-Hoehe (Standardgröße) abrufen mittels control.getHeight();


Falls noch weitere Anregungen für mich vorhanden sind oder noch Fragen bestehen... legt los 🙂

Liebe Grüße
Times
 
Meine Anregung wäre, sich etwas mehr mit JavaFX zu beschäftigen... Sicher kannst du alles "wie bisher aus Swing gewohnt" weitermachen. Die folgende Frage musst du dir dann aber stellen lassen: Warum dann überhaupt von Swing weggehen?

Unter JavaFX kann man (und mit "kann" meine ich "sollte") strikter nach MVC arbeiten. Trennung von der UI (in Form von FXML-Dateien) und dem dazugehörigen Controller.
Es gibt bereits eine Reihe von Frameworks (afterburner.fx, mvvmFXm, ...) die einem dort auch noch unterstützend unter die Arme greifen. (Auch interessant klingt DataFX für die Verbindung zu Daten - das spielt gleich mehrere Rollen.)

Vor kurzen bin ich auch noch auf den Geschmack von Spring Boot mit JavaFX gekommen - grundsätzlich aber das tolle daran ist eigentlich die Dependency-Injection. Und das ganze noch schön Kombiniert mit JavaFX-Databinding und den vielen netten funktionalen Spielereien aus Java8.

Ich würde dir also empfehlen nicht einfach nur wie bisher weiter zu machen, sondern mal zu schauen, was mat mit JavaFX besser/anders/... machen kann (z.B. darf man hier gern Built-In-Layouts ineinander verschachteln, Jooses Link war hier sehr sinnvoll!).
 
Hey dzim,

da hast vollkommen Recht. Natürlich wäre es unsinnig umzusteigen wenn man alles so macht wie gehabt! In ferner Zukunft habe ich auch vor noch einiges umzustellen, aber da eine Umstellung mal nicht eben so getan ist hatte ich vor das ganze so umzusetzen das ich mit und mit immer mehr in die FX-Welt eintauche.

Ich werde mich also aufjedenfall noch genauer damit beschäftigen und bedanke mich bei euch beiden für die vielen Tipps 🙂

Liebe Grüßé
Times
 
Viel Erfolg dann und versuche dich lieber früher als später ;-)

Wenn du spezifische Fragen hast, immer her damit. Wenn ich sie verstehe und dazu etwas sagen kann, werde ich sie normalerweise versuchen, schnell zu beantworten.

Joose und ein paar andere sind sowieso schnell :-D
 

Zurück
Oben