2016-04-22 11 views
0

Also habe ich in JavaFX eine analoge Uhr programmiert und habe die Basisfunktionalität heruntergefahren. Jetzt versuche ich ein Dropdown-Menü hinzuzufügen, wenn ich auf eine benutzerdefinierte Schaltfläche klicke (Dreieck mit einem Polygon). Bis jetzt funktioniert alles gut, außer dass der Hintergrund meines StackPane weiß ist, wenn ich versuche, ein ContextMenu entweder vor oder nach dem Klick auf den Button hinzuzufügen. Bisher war Transparenz noch in Ordnung. Hier sind einige Bilder von dem Problem.Das JavaFX-Kontextmenü stoppt den transparenten Hintergrund von Parents

Dies ist, wie es aussehen sollte (Sie meine Tapete wegen der transparenten Fenster sehen können, wie es sein sollte.) enter image description here

Nachdem ich die Taste für das Drop-Down-Menü drücken, den Hintergrund ändert. enter image description here

+0

Ist das 'ContextMenu' die einzige' Control'-Unterklasse, die Sie verwenden? (Oder zumindest das erste Steuerelement, das Sie anzeigen?) –

+0

Ja, es war die erste Kontrolle, danke, dass Sie auch helfen wollten! Ich bin schon eine Weile darüber gestolpert. –

+0

Siehe meine Antwort für eine vollständige Erklärung dessen, was passiert. –

Antwort

1

JavaFX-Steuerelemente werden von CSS formatiert. Wenn Sie zum ersten Mal ein Steuerelement erstellen, wird das Standard-Stylesheet für den Benutzeragenten (modena.css) geladen, und die darin definierten Stile werden auf das Szenegraph angewendet. Andere JavaFX-Knotenklassen, wie zum Beispiel Formen, Bildsichten und Layoutbereiche, erzwingen kein Laden von CSS (um die Leistung für grafikintensive Anwendungen zu verbessern, die kein CSS benötigen).

Es klingt also so, als wäre das Kontextmenü das erste Steuerelement, das Sie erstellen: Wenn Sie es erstellen und anzeigen, wendet es das Standard-CSS auf die Szene an. Die Standardhintergrundfarbe für den Hauptbereich ist eine nicht transparente Farbe. Wenn also Ihre Scene und Stage transparent sind, ist der Inhalt der Szene nach der Anwendung des CSS nicht verfügbar.

Die Lösung ist die Transparenz für den Wurzelbereich zu spezifizieren:

root.setStyle("-fx-background-color: transparent;"); 

oder das Äquivalent in einem externen Sheet.

0

Um meine eigene Frage in dem Fall zu beantworten jemand wissen will, wie es scheint, dass, wenn die ContextMenu zu der Szene hinzugefügt wird, die initStyle Stage (StageStyle.TRANSPARENT) außer Kraft gesetzt wird und zeigt die Farben des Parent. Da ich keine CSS-Stile für den Stamm initialisiert habe, wurde nur Weiß angezeigt. Das Update wäre:

// die Eltern-Layout-Fenster

parent.setStyle ("- fx-background-color: rgba (0, 0, 0, 0.0)");

Verwandte Themen