JavaFX Flexible Layouts dynamisch erstellen / Design-Inspirationen

top_chief

Mitglied
Hallo,
ich wollte mich mal umhören, wie ihr vorgeht, wenn ihr in JavaFx in einem Fenster Inhalte anzeigen wollt, die in ihrem Umfang sehr unterschiedlich sind. Gibt irgendwelche Tipps und Kniffe? Bis jetzt habe ich die Bereiche, die sich der zB Fenstergröße anpassen, immer mit dem SceneBuilder erstellt - und ich frage mich, wie sich sowas reinweg in Java-Code bewerkstelligen lässt.
Ich habe mir mal diese "Ensemble" Anwendung angesehen, dort gibts ja bereits reichlich Inspirationen bzw. eine gute Übersicht, wie man mit recht einfachen Mitteln schon eine schöne Benutzeroberfläche "zaubern" kann. Wenn ihr gute Links oder Anleitungen kennt die, die Erstellung von der GUI thematisieren, bitte posten :)

Danke vorab :)
Martin
 

Flown

Administrator
Mitarbeiter
Es gibt eine ganze Sparte an Informatiker die sich das Problem der UI annehmen. Wie UI aufgebaut sein soll, wie sie am besten funktioniert, usw. Dazu findest du allerhand an UI Guidelines im Netz.
Händisch UI programmiert man heutzutage nicht mehr (bzw. ganz selten). WYSISWYG Editoren, wie SceneBuilder, sind perfekt ausgelegt um deine UI Vorstellungen umzusetzen - wer hat auch schon Lust fxml Code zu schreiben?
 

dennisbauer

Aktives Mitglied
Für feste GUIs, deren Layout feststeht und sich während der Laufzeit nicht großartig verändert baue ich in Scenebuilder fertig, mit entsprechenden FXML-Annotationen im Controller, um auf diese einen Injectionpoint für meine Module und Widgets zu haben.
Wenn ein Modul statisch ist, ist das Vorgehen hier genauso wie das oben genannte. Sofern das Modul flexible Inhalte benötigt, mache ich grundlegend die Unterscheidung, ob es ein größerer Widgets wird, welches wiederholt eingebunden werden muss. Dann baue ich dieses Widget ebenfalls über den Scenebuilder und entsprechendem Controller und binde dies dynamisch, meist in eine VBox, ein. Wenn es nur kleinere Elemente sind, wie z.B. Textfelder und ein Label, dann baue ich dies meist programmatisch zusammen. Das geht dann schneller von der Hand.


Was mir nur sehr stark auffällt ist, dass das große Aufkommen von FXML-Dateien zum Bauen eines Moduls sehr schnell die Ladezeiten in die Höhe treiben kann, weshalb ich es eher bevorzuge ab einer bestimmten Tiefe auch größere Templates programmatisch zu erstellen.
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Es gibt eine ganze Sparte an Informatiker die sich das Problem der UI annehmen. Wie UI aufgebaut sein soll, wie sie am besten funktioniert, usw. Dazu findest du allerhand an UI Guidelines im Netz.
Händisch UI programmiert man heutzutage nicht mehr (bzw. ganz selten). WYSISWYG Editoren, wie SceneBuilder, sind perfekt ausgelegt um deine UI Vorstellungen umzusetzen - wer hat auch schon Lust fxml Code zu schreiben?

Dann hast Du aber noch nicht an grossen Projekten gearbeitet. Wir haben immer wieder Applikationen wo sich das UI dynamisch je nach Daten die verarbeitet werden müssen aufbaut.
Nehmen wir mal an Du fragst die Detaildaten einer Person ab.
Bei einer Person bekommst du jetzt 1 Telefonnummer, bei der anderen 4 Telefonnummern. Klar kann man das jetzt auch häßlich machen und einfach ein Popup für die Telefonnummern nehmen. Das bedeutet aber, dass ich in 90% der Fälle wo die Person nur eine Telefonnummer hat ich immer das vollkommen sinnlose Popup habe.

Oder ich mache es eben schön und erzeugt das UI dynamisch je nachdem was für Informationen ich zur Person bekomme.

Und das ist ja nur ein Beispiel. Solche Fälle kommemn zu hunderten vor.

Gruß

Claus
 

Flown

Administrator
Mitarbeiter
Dann hast Du aber noch nicht an grossen Projekten gearbeitet.
Immer vorsichtig sein mit solchen Aussagen. ;)

Wie ich bereits vorher gesagt habe, ist das auch eine eigene, riesige Sparte (UI-Entwicklunt, Design, etc.). Da gibt es nicht die eine richtige Lösung. Vieles hängt von der Philosophie der Entwickler und deren Stil/Erfahrung ab.

Es gibt jetzt zwei Möglichkeiten um Daten anzuzeigen. Entweder man hat die UI und trimmt die Daten so, dass sie auf die UI passen, oder man kennt die Struktur der Daten und lässt sich die UI generieren.

Bei dem zweiten Ansatz kenn ich die Struktur der Daten und kann sehr gute Voraussagen treffen, wie diese aufgearbeitet werden soll. In diesem Falle nehme ich geeigenete UI-Komponenten die zu meine Struktur passen.

Eine Lösung für dein Beispiel mit den verschiedenen Telefonnummern wäre eine Liste zu wählen und nicht einzelne Labels.

Also gibt es meiner Meinung nach mehrere Wege die nach Rom führen.
 

top_chief

Mitglied
Hehe, so groß ist mein Programm nicht, aber trotzdem hätte ich es gerne so, dass die UI ansehnlich ist. Gerade weil die Desktop-App eine Art Zusatz für eine mobile App sein soll und im mobilen Bereich die Nutzer häufig wert auf Form und Design legen.
So gesehen bin ich ein bisschen hin und hergerissen.. Einerseits merke ich dass der SceneBuilder schon sehr viel Arbeit abnimmt, aber auf der anderen Seite wohl auch seine Grenzen hat.
Um das Beispiel mit den Telefonnummern auf den Vorschlag mit den Templates anzuwenden:
Man erstellt ein eigenes Widget mit dem SceneBuilder, was bspw eine Telefonnummer und zwei Icons anzeigt und lädt das dann dynamisch für jedes Vorhandensein in eine Art Container (Layout). Ist das so richtig gedacht?
Über die "fx:id" werden die Elemente dann wohl kaum mehr ansprechbar sein, dass heißt man würde die Funktionalitäten eines Buttons dann gleich beim Hereinladen (mit)setzen, oder gibt es hier eine andere Lösung?

Schon mal Danke für eure Antworten. :)
 

Thallius

Top Contributor
Liste wäre ja noch übler als ein Popup. Da habe ich in den 90% der Fälle wo es nur eine Nummer gibt trotzdem den ganzen Platz für 4-5 (oder wieviel auch immer ich als Default angegeben habe) Einträge verschwendet.

Aber Du hast recht. In vielen Applikationen wird es genauso gemacht und ich ärgere mich immer wieder darüber, dass Design und Funktionalität hinterher bleiben nur weil es einfach zu pogrammieren ist. Aber das ist nunmal heute so und dagegen kann man nichts machen und das werfe ich Dir sicherlich nicht vor ;)

Ich bin was UI's angeht relativ pingelig, da ich viele Jahre mit für die Entwicklung eines sehr anwenderfreundlichen Videoschnitt-Systems verantwortlich war. Ziel der Software (welches auch erreicht wurde) war, auch über 60 jährige, die bis dato nie mit einem Computer gearbeitet hatten als Kunden zu gewinnen. Das Konzept ging damals voll auf. Heute ist sowas natürlich kein Thema mehr, da jeder mit einem Computer aufgewachsen ist. Aber damals haben wir sehr viel Erfahrung gesammelt wie man Programme gestalten kann um es dem Anwender einfacher zu machen und gleichzeitig ein für das Auge gefäliges Design zu schaffen. (Wir sind damals sogar dafür ausgezeichnet worden)

Von daher ist da immer noch was hängen geblieben das nicht so recht aus meinem Schädel raus will und wenn man nur mit Bordmittel (UIBUilder) arbeitet, dann hat man halt einfach zu wenig flexibilität um so ein hochgestecktes Ziel zu erreichen.

Gruß

Claus
 

dzim

Top Contributor
Na ja. Ich würde heutzutage auch wiederkehrende UI-Schnipsel (egal, ob sie am Ende in einer Liste landen, oder nicht), nicht mehr von Hand machen sondern per deklarativer UI. Dort Änderungen einzuführen ist immer noch einfacher, als die Code-Stellen zu suchen.
Ich finde es auch besser eine Strikte Trennung von UI und Controller durchzuziehen.

Ich gebe aber auch zu, das ich das auch schon mal "vergessen" habe...
 

Ruzmanz

Top Contributor
Ich denke, dass JavaFX auf den richtigen Weg ist. Mit CSS und eigenen Komponenten kann man sehr gut ein individuelles Design erstellen. Insgesamt fällt mir spontan kein Fall ein, wo man kein FXML nutzen sollte. Sehe darin auch keinen Widerspruch zu der Aussage von Thallius. Meiner Meinung nach müsste die Komponente selbst entscheiden wie sie sich aufbaut (bei wenigen / vielen Kontakten). Es spricht auch nichts dagegen eigene Komponenten wie z.B. Video-Timeline zu erfinden.

Viele Entwickler sind aber keine Designer. Manche Entwickler glauben, dass sie dem Nutzer einen gefallen tun, wenn sie individuelle Komponenten erstellen. Atlassian hat exzessiv diesen Ansatz verfolgt. Am Ende gab es ca. 20 verschiedene Comboboxen. Sowas ist sehr fehleranfällig, schwer zu warten und der Nutzer muss alle verschiedenen Input-Elemente lernen (also nicht mehr intutiv!).
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Flexible JTable mit editierbaren Zellen,abhängig von Data AWT, Swing, JavaFX & SWT 2
D Welche Layouts anwenden? AWT, Swing, JavaFX & SWT 2
N Layouts AWT, Swing, JavaFX & SWT 2
M Java FX Layouts übereinander statt nebeneinander AWT, Swing, JavaFX & SWT 4
D Zwischen Null-Layouts wechseln AWT, Swing, JavaFX & SWT 2
K JavaFX Erzeugen dynamischer Layouts in fxml AWT, Swing, JavaFX & SWT 3
R GUI Layouts AWT, Swing, JavaFX & SWT 6
F Swing Anpassen des Layouts AWT, Swing, JavaFX & SWT 3
U LayoutManager Probleme mit Layouts AWT, Swing, JavaFX & SWT 5
G Swing Buttons in Layouts frei platzieren AWT, Swing, JavaFX & SWT 7
S Layouts, mehrere Buttons nebeneinander AWT, Swing, JavaFX & SWT 2
J LayoutManager Hilfe bei Wahl des Layouts AWT, Swing, JavaFX & SWT 9
R Wie Vorgehen bei fundamentaler Veränderung des Layouts während des Programmablaufs? AWT, Swing, JavaFX & SWT 19
B Layouts mit if-Abfrage ueberpruefen AWT, Swing, JavaFX & SWT 9
JStickman Layouts bei SWT AWT, Swing, JavaFX & SWT 6
M Verschiedene Layouts anzeigen AWT, Swing, JavaFX & SWT 5
hdi Probleme mit Layouts AWT, Swing, JavaFX & SWT 12
S Layouts AWT, Swing, JavaFX & SWT 5
K 2 Panels und Layouts AWT, Swing, JavaFX & SWT 2
S Verschachtelte Layouts AWT, Swing, JavaFX & SWT 4
P Frage zu Layouts AWT, Swing, JavaFX & SWT 4
W JavaFX Farben dynamisch anpassen AWT, Swing, JavaFX & SWT 4
B Größe der Parent-Component dynamisch an children anpassen AWT, Swing, JavaFX & SWT 30
K Buttons dynamisch erstellen (NetBeans) AWT, Swing, JavaFX & SWT 10
ralfb1105 JavaFX TreeView dynamisch aus Datenbank Tabelle erstellen AWT, Swing, JavaFX & SWT 22
ralfb1105 JavaFX Dynamisch TableView Spalten erstellen AWT, Swing, JavaFX & SWT 4
A Swing JPanels dynamisch untereinander einfügen AWT, Swing, JavaFX & SWT 3
Wurstsemmel SWT MenuItem dynamisch hinzufügen AWT, Swing, JavaFX & SWT 2
L JavaFX List oder TableView Größe dynamisch anpassen? AWT, Swing, JavaFX & SWT 4
MaxG. Swing Dynamisch grafische Objekte erzeugen AWT, Swing, JavaFX & SWT 12
Thallius JTable dynamisch Spaltenanzahl verändern AWT, Swing, JavaFX & SWT 2
Thallius JTable dynamisch laden? AWT, Swing, JavaFX & SWT 2
S CombinedDomainXYPlot und dynamisch hinzugefügte subplots: Darstellungsprobleme AWT, Swing, JavaFX & SWT 3
K Liniendicke für Line Chart dynamisch ändern AWT, Swing, JavaFX & SWT 0
N Swing Wie Programm strukturieren? (Dynamisch Komponenten hinzufügen) AWT, Swing, JavaFX & SWT 1
llabusch JavaFX Dynamisch alles vergrößern (wie im Browser) AWT, Swing, JavaFX & SWT 3
agent47 JavaFX TreeView Struktur dynamisch einlesen AWT, Swing, JavaFX & SWT 1
D JavaFX Dynamisch erzeugte Buttons sollen Code ausführen. AWT, Swing, JavaFX & SWT 2
D JavaFX Dynamisch erzeugte Checkboxen aus VBox auslesen AWT, Swing, JavaFX & SWT 3
J Swing/AWT | Dynamisch erzeugte Objekte ansprechen AWT, Swing, JavaFX & SWT 1
I JTable dynamisch aus ArrayList befüllen AWT, Swing, JavaFX & SWT 3
T Dynamisch mehrere Checkboxen anlegen AWT, Swing, JavaFX & SWT 2
J JavaFX TextArea dynamisch Icon im Background anzeigen AWT, Swing, JavaFX & SWT 2
T JPanel dynamisch erstellen AWT, Swing, JavaFX & SWT 4
G FormLayout dynamisch wachsend AWT, Swing, JavaFX & SWT 0
T JTable dynamisch mit ArrayList AWT, Swing, JavaFX & SWT 2
A Swing Logikaufgabe: Zeilenanzahl einer JTable mit 3d String dynamisch anpassen AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
P TableViewerColumn dynamisch erzeugen AWT, Swing, JavaFX & SWT 3
Kandum obj_JMenu.addMenuListener - variable Anzahl an JMenus / menulistenern & frame.setTitle() dynamisch AWT, Swing, JavaFX & SWT 7
A HELP: JFieldText dynamisch setzen -> langsam AWT, Swing, JavaFX & SWT 19
C Swing CardLayout dynamisch erweitern AWT, Swing, JavaFX & SWT 11
B Link eines Icons dynamisch gestalten AWT, Swing, JavaFX & SWT 2
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
B JToolBar dynamisch auf mehrere Zeilen erweitern AWT, Swing, JavaFX & SWT 2
I Jlist dynamisch aus Datenbank füllen AWT, Swing, JavaFX & SWT 14
P Gifs dynamisch auf GUI anzeigen AWT, Swing, JavaFX & SWT 4
E Breite eines JButton dynamisch ändern AWT, Swing, JavaFX & SWT 3
P Swing Dynamisch zeichnen mit Shapes wie Rectangle2D.Float ? AWT, Swing, JavaFX & SWT 6
C SWT - widget dynamisch erzeugen und anzeigen AWT, Swing, JavaFX & SWT 10
C Tooltip dynamisch setzen AWT, Swing, JavaFX & SWT 7
T Elemente zu JList dynamisch hinzufügen AWT, Swing, JavaFX & SWT 4
X jTextFields dynamisch initialisieren AWT, Swing, JavaFX & SWT 2
A Swing Dynamisch Objekte erzeugen AWT, Swing, JavaFX & SWT 3
L Label dynamisch awt AWT, Swing, JavaFX & SWT 2
H Swing Symbol in Taskleiste dynamisch aus- bzw. einblenden AWT, Swing, JavaFX & SWT 14
B JTabbedPane mit Enumeration dynamisch füllen AWT, Swing, JavaFX & SWT 5
L Dynamisch Objekte in Canvas zeichnen AWT, Swing, JavaFX & SWT 5
D Panels Dynamisch zur Laufzeit austauschen AWT, Swing, JavaFX & SWT 2
J Java 2D - dynamisch zeichnen AWT, Swing, JavaFX & SWT 4
A AWT HSB-Farben dynamisch berechnen AWT, Swing, JavaFX & SWT 5
P Dynamisch Sortieren AWT, Swing, JavaFX & SWT 2
B Swing Dynamisch Elemente in JScrollPane hinzufügen AWT, Swing, JavaFX & SWT 6
Airwolf89 Swing Dynamisch auf Objekte in einer GUI zugreifen AWT, Swing, JavaFX & SWT 10
Airwolf89 Swing Tabs dynamisch ausblenden AWT, Swing, JavaFX & SWT 3
H Swing Register (jTabbedPane) dynamisch hinzufügen? AWT, Swing, JavaFX & SWT 7
Airwolf89 Swing Anzahl der Tabellenspalten dynamisch setzen AWT, Swing, JavaFX & SWT 2
S SWT WizardPage - Button anzeigen und Text-Widgets dynamisch aktualisieren AWT, Swing, JavaFX & SWT 12
R JLabel und JSlider dynamisch erzeugen? AWT, Swing, JavaFX & SWT 3
W Swing dynamisch Buttons in JEditorPane erstellen AWT, Swing, JavaFX & SWT 2
Pithecanthropus Swing JPanels dynamisch austauschen AWT, Swing, JavaFX & SWT 8
S Applet mit Graphics dynamisch vergrößern AWT, Swing, JavaFX & SWT 3
Spot84 jtable mit checkboxnode dynamisch per arraylist füllen AWT, Swing, JavaFX & SWT 8
bugmenot Dynamisch erzeugte jLabels werden nicht angezeigt. AWT, Swing, JavaFX & SWT 5
ABstraCT JCombobox dynamisch füllen (erstes Element Problem) AWT, Swing, JavaFX & SWT 4
J JLabels usw. dynamisch anlegen AWT, Swing, JavaFX & SWT 8
A JList dynamisch vergrößern AWT, Swing, JavaFX & SWT 4
G Felder dynamisch erzeugen! AWT, Swing, JavaFX & SWT 3
I Textfields dynamisch erzeugen AWT, Swing, JavaFX & SWT 4
G Dynamisch Komponenten in einem JPanel bzw JFram austauschen AWT, Swing, JavaFX & SWT 7
B JTree dynamisch aufbauen AWT, Swing, JavaFX & SWT 3
L JPanel dynamisch zuweisen AWT, Swing, JavaFX & SWT 5
T Inhalt einer Combobox dynamisch erstellen? AWT, Swing, JavaFX & SWT 13
S JTextField-Größe dynamisch an Inhalt anpassen. AWT, Swing, JavaFX & SWT 3
S Farben eienr JTextPane dynamisch zuweisen AWT, Swing, JavaFX & SWT 2
J Zugriff auf "dynamisch erzeugte" JTextFields AWT, Swing, JavaFX & SWT 2
D Systray-Icon dynamisch zeichnen AWT, Swing, JavaFX & SWT 8
B JTree dynamisch nachladen AWT, Swing, JavaFX & SWT 3
U Label Icon dynamisch belegen AWT, Swing, JavaFX & SWT 12
F JRadioButton dynamisch benennen? AWT, Swing, JavaFX & SWT 7

Ähnliche Java Themen

Neue Themen


Oben