如何防止JavaFX FXML菜单项的文本填充从菜单继承

我正在使用JavaFx,似乎在使菜单栏看起来完全像我想要使用CSS的方式时遇到问题。

主菜单栏似乎还可以。当我将鼠标悬停或选择时,背景变暗,字体变成蓝色(示例中为“编辑”)。与下面的菜单项相同(在示例中为“ Delete”),但其他未悬停,未选中的菜单项似乎也显示蓝色文本,而不是白色。

我尝试查看https://docs.oracle.com/javase/8/javafx/api/javafx/scene/doc-files/cssref.html和其他StackOverflow文章,只是一堆试验和错误,但似乎无济于事。有提示吗?

源代码位于https://github.com/pnogas/TornadoTest,但下面将提供一些代码段,以防万一我从github上将其删除以供将来的读者阅读。

如何防止JavaFX FXML菜单项的文本填充从菜单继承

从场景生成器生成的FXML,然后从intelliJ IDE自动格式化

<?import javafx.scene.control.*?>
<?import javafx.scene.layout.*?>
<VBox prefHeight="400.0" prefWidth="640.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1"
  fx:controller="com.paulnogas.log.analyzer.MainView">
<MenuBar stylesheets="@test.css" VBox.vgrow="NEVER">
    <Menu mnemonicParsing="false" text="Edit">
        <MenuItem mnemonicParsing="false" text="Undo"/>
        <MenuItem mnemonicParsing="false" text="Redo"/>
        <SeparatorMenuItem mnemonicParsing="false"/>
        <MenuItem mnemonicParsing="false" text="Cut"/>
        <MenuItem mnemonicParsing="false" text="Copy"/>
        <MenuItem mnemonicParsing="false" text="Paste"/>
        <MenuItem mnemonicParsing="false" text="Delete"/>
        <SeparatorMenuItem mnemonicParsing="false"/>
        <MenuItem mnemonicParsing="false" text="Select All"/>
        <MenuItem mnemonicParsing="false" text="unselect All"/>
    </Menu>

这是test.css的相关部分

.menu-bar,.menu,.menu-item {
    -fx-background-color: #222222;
}

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

.menu:hover,.menu:showing,.menu-item:hover {
    -fx-background-color: #111111;
}

.menu:hover .label,.menu:showing .label,.menu-item:hover .label {
    -fx-text-fill: #80CBC4;
}

(我知道TornadoFX比普通的* .css文件更喜欢Kotlin中的类型安全CSS,但我想我现在想在* .css中使用它。我想偶尔使用Scene Builder。我也喜欢

iCMS 回答:如何防止JavaFX FXML菜单项的文本填充从菜单继承

选择器(例如)

data_test %>%
    e_charts(year) %>%
    e_x_axis(type='category',axisLabel = list(interval = 4),axisTick = list(inside=TRUE,alignWithLabel=TRUE,interval=4)) %>%
    e_y_axis(variable) %>%
    e_line(variable)

将选择显示菜单的后代的所有标签。因此,这包括作为菜单项的子节点的标签,该菜单项是显示菜单的子节点,等等。在这里,您要选择作为显示菜单的直接子级的标签。正确的选择器语法是

.menu:showing .label

您需要的CSS

.menu:showing > .label

另一种解决方案是在显示菜单中显式设置带有.menu-bar,.menu,.menu-item { -fx-background-color: #222222; } .menu-bar > .label,.menu > .label,.menu-item > .label { -fx-text-fill: white; } .menu:hover,.menu:showing,.menu-item:hover { -fx-background-color: #111111; } .menu:hover > .label,.menu:showing > .label,.menu-item:hover > .label { -fx-text-fill: #80CBC4; } 伪类的菜单项中标签的文本颜色:

:hover
本文链接:https://www.f2er.com/1922119.html

大家都在问