Ich habe ein seltsames Problem mit JavaFX und Font Awesome, die ich habe Probleme, die Ursache von. Das Problem ist noch komplizierter, weil ich den Code nicht wirklich teilen kann, und egal wie sehr ich versucht habe, das Problem in einem einfacheren Fall zu replizieren - ich konnte es nicht.Einige _instances_ von Glyphe verschwinden - wie kann man Grund erkennen?
Das Problem ist wie folgt - Ich habe eine TableView
, in der jede Spalte eine Hyperlink
als Grafik, mit einem Font Awesome Glyph hat. Das alles funktioniert gut, bis auf eine Stufe - in dieser Phase wird das erste Mal gezeigt, dass alles in Ordnung ist, aber beim zweiten Mal werden drei der Spaltenglyphen wieder zu Quadraten. Das ist seltsam, da alle Spalten das gleiche Zeichen derselben Schriftart verwenden.
Hier sind vor und nach Bilder - beachten Sie die Glyphen sind alle gleich, aber die linke diejenigen geworden Quadrate:
Die Glyphen und Schrift sind durch FXML gesetzt und sind für alle Spalten gleich:
<TableColumn fx:id="col1" prefWidth="83.0" text="Column 1"><graphic>
<Hyperlink onAction="#requestFilter" text="" visited="true">
<font>
<Font name="FontAwesome Regular" size="13.0" />
</font></Hyperlink>
</graphic>
</TableColumn>
<TableColumn fx:id="col2" prefWidth="138.0" text="Column 2"><graphic>
<Hyperlink onAction="#requestFilter" text="" visited="true">
<font>
<Font name="FontAwesome Regular" size="13.0" />
</font></Hyperlink>
</graphic>
</TableColumn>
<TableColumn fx:id="col3" prefWidth="59.0" text="Column 3"><graphic>
<Hyperlink onAction="#requestFilter" text="" visited="true">
<font>
<Font name="FontAwesome Regular" size="13.0" />
</font></Hyperlink>
</graphic>
</TableColumn>
<TableColumn fx:id="col4" prefWidth="103.0" text="Column 4"><graphic>
<Hyperlink onAction="#requestFilter" text="" visited="true">
<font>
<Font name="FontAwesome Regular" size="13.0" />
</font></Hyperlink>
</graphic>
</TableColumn>
Hier sind die letzten zwei Spalten diejenigen, die ihre verlieren Glyphe (die Szene befindet sich in der Ausrichtung von rechts nach links).
Außerdem - es sind immer die letzten drei Spalten, die ihre Glyphe verlieren, das heißt - wenn ich beim ersten Anzeigen die Spalte neu anordne, verlasse ich die Spalten in der Tabelle (links, wieder - die Szene stimmt (links) verliert beim nächsten Mal, wenn die Stufe angezeigt wird, ihre Glyphe. Nachfolgendes Verstecken/Anzeigen wird keine Glyphen mehr verlieren.
Ich zeige die Bühne mit Stage#showAndWait
, und ich behalte einen Verweis auf die Bühne, so dass es nur einmal erstellt wird.
Ich weiß, es ist schwer zu helfen, wenn ich keinen Code (Client Vertraulichkeit) teilen kann, also was ich frage ist - wo kann ich sehen, was passiert ist? Wie kommt es, dass einige Instanzen derselben Glyphe verschwinden und andere nicht? Ist sonst jemand auf so etwas gestoßen? Was war der Grund dafür?
Edit: Ich habe druckt debug hinzugefügt der die Eigenschaften Hyperlinks, und zwar mit der zweiten die Schrift zeigt, kehrt in den ‚System‘ für die letzten drei Spalten. Auf der Suche nach der Quelle der Änderung habe ich einen Änderungslistener hinzugefügt und Haltepunkt darin eingefügt. Der Stack zeigt, dass die Änderung innerhalb von applyCSS
erfolgt, nach einer Menge interner Aufrufe, die auf showAndWait
folgen, keine davon in meinem eigenen Code (d. H. - alle im JavaFX-Bibliothekscode). Es scheint aus irgendeinem Grund, dass JavaFX die Schriftartdefinition einiger Steuerelemente zurücksetzt, obwohl sie alle genau gleich definiert sind! Dies wird durch die Tatsache bestätigt, dass es egal ist, um welche Tabellenspalte es sich handelt, aber wo es in der TableView ist.
Es scheint also so, als ob ein fehlerhaftes JavaFX-Verhalten die Schriftart auf den Standard ("-fx-font") anstatt auf den auf dem Knoten selbst definierten zurücksetzt. Wer weiß genug über die JavaFX-CSS-Logik, um den Fehler zu finden?
Alle Hyperlinks haben keine benutzerdefinierten Stile oder Klassen festgelegt, und nur die 'besuchte' Pseudoklassengruppe.
Bearbeiten 2: Das Hinzufügen eines Schriftartnamens zum CSS behebt das Problem. Ich würde immer noch gerne die Quelle des Bugs finden (was ich, wie ich sicher bin, in der JavaFX-CSS-Handhabung ist), aber es ist zu chaotisch für mich, es jetzt durchzugehen.Die CSS ich benutze, ist:
.table-column .hyperlink {
-fx-font-family: "FontAwesome";
}
Verwenden Sie [FontAwesomeFx] (https://bitbucket.org/Jerady/fontawesomefx) oder [plain old FontAwesome] (http://fontawesome.io/)? –
Warum haben die TableColumns Text? Warum haben sie unterschiedliche PrefWidths? Und warum alle besucht? Verwenden Sie CSS zum Erstellen von Steuerelementen. –
Einfaches altes FontAwesome, geladen von einer ttf-Datei, die im JAR enthalten ist. Ich kann bestätigen, dass es korrekt geladen ist, und das gleiche Verhalten wird auf Systemen mit FontAwesome installiert oder ohne es installiert. – Itai