Jak ustawić styl dla ContextMenu JavaFX przy użyciu css?

Próbuję zmienić styl aContextMenu element za pomocą oddzielnego pliku CSS. Przejrzałem sekcję caspian.css i znalazłem następujące definicje:

.menu kontekstowe.context-menu .separator.context-menu .scroll-arrow.context-menu .scroll-arrow: hover.context-menu: show-mnemonics .mnemonic-underline

Skopiowałem je dokładnie do mojego pliku css i zmieniłem tylko wartości kolorów tła jako test:

.context-menu {
    -fx-skin: "com.sun.javafx.scene.control.skin.ContextMenuSkin";
    -fx-background-color: #006699;
    -fx-background-insets: 0, 1, 2;
    -fx-background-radius: 0 6 6 6, 0 5 5 5, 0 4 4 4;
/*    -fx-padding: 0.666667em 0.083333em 0.666667em 0.083333em;  8 1 8 1 */
    -fx-padding: 0.333333em 0.083333em 0.666667em 0.083333em; /* 4 1 8 1 */
}

.context-menu .separator {
    -fx-padding: 0.0em 0.333333em 0.0em 0.333333em; /* 0 4 0 4 */
}

.context-menu .scroll-arrow {
    -fx-padding: 0.416667em 0.416667em 0.416667em 0.416667em; /* 5 */
    -fx-background-color: #006699;
}

.context-menu .scroll-arrow:hover {
    -fx-background: -fx-accent;
    -fx-background-color: #006699;
    -fx-text-fill: -fx-selection-bar-text;
}

.context-menu:show-mnemonics .mnemonic-underline {
    -fx-stroke: -fx-text-fill;
}

To oczywiście nie działa lub nie byłoby mnie tutaj. Wydaje się, że nie ma żadnego efektu bez względu na to, jakie wartości zmieniam.

Otworzyłem program JavaFX Scene Builder, aby rzucić okiem (uwaga, użyłem tego w ostateczności, ponieważ uważam, że korzystanie z niego jest dość niezdarne). W części Style css zauważyłem menu kontekstowe, które jest listamiCSSBridge[context-menu] co wydaje się dziwne. Inne rzeczy, takie jak Label, mająLabel[label].

Czy ktoś może mi wyjaśnić, co tu się dzieje, ponieważ wydaje się, że ignoruje mój plik css dla menu kontekstowych i używa wartości domyślnych w caspian.css?

Dołączanie przykładowego pliku FXML, css i kodu java do uruchomienia.

Sample.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import java.lang.*?>
<?import java.net.*?>
<?import javafx.scene.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.image.*?>
<?import javafx.scene.layout.*?>

<AnchorPane fx:id="myroot" xmlns:fx="http://javafx.com/fxml">
  <children>
    <Label text="Right click for options">
      <contextMenu>
        <ContextMenu>
          <items>
            <MenuItem text="Help" />
            <MenuItem text="Me" />
          </items>
        </ContextMenu>
      </contextMenu>
    </Label>
  </children>
  <stylesheets>
    <URL value="@contextcolor.css" />
  </stylesheets>
</AnchorPane>

contextcolor.css

.root {
  -fx-background-color: cornsilk; 
  -fx-padding: 10;
}

.context-menu {
  -fx-background-color: #006699;
  -fx-text-fill: white;
}

.menu-item .label {
  -fx-text-fill: yellow;
}

.menu-item:focused .label {
  -fx-text-fill: white;
}

Test.java

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class Test extends Application {

    public static void main(String[] args) {
        Application.launch(Test.class, args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        System.out.println(com.sun.javafx.runtime.VersionInfo.getVersion());

        Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));

        stage.setScene(new Scene(root));
        stage.show();
    }
}

questionAnswers(2)

yourAnswerToTheQuestion