CSS para establecer el color SeparatorMenuItem?

JoshuaD:

Me gustaría cambiar el color de un SeparatorMenuItem en mi programa. ¿Qué código CSS me permitirá cambiar su color? No puedo encontrar ninguna información sobre ella en la Guía de referencia CSS JavaFX .

José Pereda :

Esta pregunta se ha respondido varias veces ya para otros controles. Pero aquí van:

Siga el código

Cuando se agrega una SeparatorMenuItem, se puede ver el código fuente aquí o directamente desde el IDE.

public SeparatorMenuItem() {
    super(new Separator(Orientation.HORIZONTAL), false);
    getStyleClass().add(DEFAULT_STYLE_CLASS);
}

Utiliza como DEFAULT_STYLE_CLASS, separator-menu-itemy se extiende CustomMenuItem, que se extiende MenuItem, que no es un control , por lo que esta clase de estilo podría no ser el que tenemos que modificar.

Al hacer clic en el Menunodo que muestra una ContextMenucon clase de estilo context-menu, que contiene los elementos del menú, la piel se utiliza para representar el contenido es ContextMenuSkin, y cada artículo utiliza una ContextMenuContent.MenuItemContainer:

Recipiente responsable para el tendido de una sola fila en el menú - en otras palabras, este contiene y establece un único Menultem, independientemente de que de subtipo específico.

Los artículos se añadió a una ContextMenuContent.MenuBox(una caja vertical), pero este recipiente no tiene una clase de estilo específico.

El nodo de contenido de la SeparatorMenuItemes una Separator, un nodo con clase de estilo separator, que tiene SeparatorSkincomo la piel, y que sólo se hace una line, una región con linecomo clase de estilo.

Por último, podemos hacer algo como esto para cambiar el SeparatorMenuItemcolor de:

.context-menu > * > .separator > .line {
    -fx-border-color: red;
    -fx-border-insets: 0;
}

Separador de elemento de menú

Como se puede ver, la cuestión principal es encontrar el nodo real que se está representando en la escena gráfica, junto con sus padres.

También es útil para imprimir esta:

menu.setOnShown(e -> {
        Node node = separatorMenuItem.getContent();
        do {
            System.out.println("Node: " + node);
            node = node.getParent();
        } while (node != null);
    });

Se imprimirá algo como:

Node: Separator@296d4a5a[styleClass=separator]
Node: ContextMenuContent$MenuBox@14793a99
Node: ContextMenuContent[id=null, styleClass=context-menu]
Node: PopupControl$CSSBridge[id=null, styleClass=context-menu]
Node: Pane@2decd2c5[styleClass=root popup]

uso ScenicView

Descargar la versión JDK 11 para su plataforma desde aquí , y mientras se ejecuta la aplicación, lanzarlo desde scenicview/bin/scenicview:

Mientras que verá la jerarquía scenegraph completa cuando se muestra el contenido del menú, como en la imagen superior, en este caso no es un problema importante que le impide, selecciona uno de los nodos para inspeccionar su contenido y estilo de las clases, sin cerrar la menú.

Así, mientras que no ayudará en este caso, siempre es una herramienta muy útil para su uso.

Comprobar modena.css

Módena es el tema aplicado por defecto a todos los incorporados en JavaFX controles.

Ya sea aquí o en su IDE, se puede encontrar el estilo exacto aplicado al control.

En este caso:

.context-menu .separator:horizontal .line {
    -fx-border-color: -fx-box-border transparent transparent transparent;
    -fx-border-insets: 1 0 0 0;
}

Así que ahora usted puede cambiar eso, según sea necesario. Tenga en cuenta que coincide precisamente lo que hemos encontrado a través del código fuente.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=227874&siteId=1
Recomendado
Clasificación