Soll ich in JavaFX CSS- oder Setter-Methoden verwenden, um Eigenschaften auf meinen UI-Knoten zu ändern? [geschlossen]

7

Es gibt zwei Möglichkeiten, Eigenschaften auf meinen UI-Knoten (Labels, Schaltflächen usw.) festzulegen.

Ich könnte so etwas verwenden:

%Vor%

Oder ich könnte etwas Äquivalentes tun:

%Vor%

Was ich mich wundere ist, ist eine dieser Methoden aus irgendeinem Grund (außer persönlicher Geschmack) vorzuziehen?

    
Xanatos 07.02.2013, 18:06
quelle

2 Antworten

17

Die Antwort darauf kommt ein bisschen auf den persönlichen Geschmack zurück, aber es gibt einige allgemeine Daumenregeln, die ich für nützlich halte.

Die vier Optionen zum Formatieren in JavaFX sind:

  1. CSS-Stylesheets.
  2. css setStyle-Befehl aus dem Code ausgegeben.
  3. Java-Code für das Styling.
  4. fxml Attribute für das Styling.

Mein Rat ist:

  1. Verwenden Sie CSS-Stylesheets für fast alle Stile.
  2. Verwenden Sie Java-API-Aufrufe, bei denen Sie Tausende von Knoten haben oder wo Sie persönlich die vom API angebotenen Sicherheitsfunktionen und einfachen Debugfunktionen bevorzugen.
  3. Verwenden Sie setStyle nur, wenn Sie dynamisch einen Stil ändern müssen, der only mit CSS gesetzt werden kann und nicht mit einer API oder gesetzt werden kann ein Stylesheet.
  4. Wenden Sie kein Styling über fxml an.

Die Vorteile der Verwendung von CSS-Stylesheets für das Styling sind:

  1. Sie können den Stil vom Code trennen.
  2. Sie können mehrere Stylesheets einfach definieren und zur Laufzeit ändern, um der Anwendung ein anderes Aussehen zu verleihen.
  3. Sie verwenden eine speziell für das Styling entwickelte Sprache.
  4. Sie können die Stylesheets in einem Design-Tool wie SceneBuilder anwenden.

Wirklich, der letzte Punkt ist kritisch, wenn Sie ein visuelles Design-Tool verwenden - Sie müssen wirklich CSS-Stylesheets verwenden, um das Beste daraus zu machen. Wenn Sie Stile in Code statt in CSS-Stylesheets anwenden, können Sie nicht wirklich visualisieren, wie die Anwendung aussieht, wenn Sie sie im visuellen Design-Tool entwerfen. Wenn Sie Stil über fxml-Attribute anwenden, wird Ihr fxml unhandlich, da es dann sowohl die Struktur und das Layout Ihrer Anwendung als auch ihren Stil definiert - und im Allgemeinen ist es das Beste, diese Bedenken zu trennen.

Ich verwende manchmal setStyle Aufrufe in meinem Code, aber meistens ist das nur wegen Faulheit und nicht weil es eine empfohlene Methode ist.

Die Notwendigkeit, Styles mit setStyle dynamisch zu ändern, sollte sehr begrenzt sein. In JavaFX 2.2 können Sie beispielsweise die Hintergrundfarbe einer Region nicht über die API festlegen. Sie können es mit einer Stilklasse einstellen. Wenn Sie jedoch die Hintergrundfarbe dynamisch auf eine vom Benutzer ausgewählte Farbe festlegen möchten, verwenden Sie möglicherweise eine setStyle-Methode wie diese button.setStyle("-fx-text-fill: " + userColor.toString() + ";"); . Also, wirklich ziemlich spezialisiert.

Beachten Sie auch, dass in JavaFX 8 einige Dinge, die nur in JavaFX 2.2 von css erledigt werden können (z. B. das Festlegen eines Bereichshintergrunds), über Java API im Code ausgeführt werden können. Für das oben angegebene Beispiel zum Festlegen einer Benutzerfüllfarbe für einen Region-Hintergrund wäre die Verwendung der Java-API die bevorzugte Methode, wenn JavaFX 8 verwendet wird.

In Bezug auf die Leistung Auswirkungen der verschiedenen Anwendungsfälle. Mein Verständnis (aus Kommentaren von JavaFX css Implementierung Maintainer in Foren) ist in den meisten Fällen, dass die Reihenfolge der Leistung von den meisten performant zu am wenigsten performant wäre etwas wie unten:

  1. Direkter API-Aufruf.
  2. Stil über FXML.
  3. Style angewendet über styleclass.
  4. setStyle-Aufruf.

Beachten Sie, dass die css-Anwendung in JavaFX sehr effizient ist, daher spielt in vielen Fällen die Leistung keine große Rolle. Meine Vermutung ist, dass es nur bei Tausenden von Knoten, die gestylt werden, einen großen Leistungseinfluss bei der Verwendung von CSS gibt, obwohl ich keine harten Daten habe, um diese Vermutung zu unterstützen.

In der Vergangenheit habe ich einige Kommentare von JavaFX-Programmierern gesehen, die möchten, dass sie CSS nicht verwenden und lieber eine JavaFX-API zum Stylen ihrer Anwendung verwenden. Gründe dafür sind Dinge wie einfacheres Debuggen, alles in einer einzigen Sprache, bessere Integration mit IDEs für die Unterstützung von Methodennamen, Bearbeiten und Kompilieren von statischen Dateitypprüfungen, etc. Und wenn es Ihre Präferenz ist, mit einer Java API anstelle von css zu stylen Aus diesen Gründen in Ihrem eigenen Code ist das in Ordnung, soweit es geht. Aber Sie werden nicht in der Lage sein, all das Styling zu erreichen, das Sie nur mit der Java API benötigen.

Die Verwendung von CSS und das Wissen darüber, wie man es in JavaFX verwendet, ist entscheidend für die Beherrschung der JavaFX-Technologie. Der Hauptgrund dafür ist, dass alle Kernsteuerelemente in JavaFX von css gestylt werden. Selbst die trivialste JavaFX-Anwendung verwendet normalerweise diese Steuerelemente und wenn Sie in der Lage sein möchten, ihr Aussehen anzupassen, müssen Sie CSS verstehen (selbst wenn es nur das standardmäßige JavaFX CSS-Stylesheet liest, damit Sie wissen, wie das Standard-Steuerelemente sind gestylt). Und wenn es um die Anpassung der Standardsteuerelemente geht, wird es im Allgemeinen einfacher sein, ein CSS-eigenes Stylesheet anzuwenden.

    
jewelsea 07.02.2013, 19:26
quelle
5

Ich denke, das kann diskutiert werden, aber meiner Meinung nach ist es, zurückzugehen und zu sehen, was Sie erreichen wollen. Wenn Sie beabsichtigen, Ihren Stil zu ändern, wäre er sehr sauber, wenn er in einer externen CSS -Datei definiert wird. Wenn Sie dann Ihren Stil ändern (oder Benutzern erlauben, ihren Stil zu ändern), würde dies an einer Stelle geändert werden.

%Vor%

JavaFX funktioniert gut mit einem MVC -Ansatz. Styling würde auf jeden Fall in den Blick fallen. Halte alles an einem Ort. Warum nicht dort bleiben?

Was macht Ihren Code sauberer? Einfacher zu lesen? Wie einfach wird es sein, von dir oder jemand anderem auf der Straße zu halten?

    
blo0p3r 07.02.2013 19:25
quelle

Tags und Links