JavaFx菜单项加速器Javafx CSS

abd*_*mer 3 java javafx javafx-css

我试图图标化JavaFX菜单项标签。我为菜单项标签和加速器标签复制了图标。这是一张说明我的问题的图像。

在此处输入图片说明

这是Javafs css代码:

.menu-item > .label {

}

#miRestore .label{
    -fx-graphic: url("/img/Upload_16x16.png");
}
#miBackup .label {
    -fx-graphic: url("/img/Flash%20Disk_16x16.png");
}
#miClose .label {
    -fx-graphic: url("/img/Delete_16x16.png");
}

#miSettings .label {
    -fx-graphic: url("/img/Settings_16x16.png");
}

#miRegistre . label{
    -fx-graphic: url("/img/Help_16x16.png");
}
Run Code Online (Sandbox Code Playgroud)

ste*_*oes 7

我找到了一个可靠的解决方案:在Scene Builder / FXML(无论您喜欢什么)中,将样式类(不是id)附加到要具有图标的每个菜单项。现在,将样式表添加到菜单栏中,在其中为每个带有图标的项目放置以下CSS:

.yourClassName > .label{
    -fx-graphic: url("yourImageUrl");
}
Run Code Online (Sandbox Code Playgroud)

在CSS文件的末尾,添加以下内容以删除所有第二个图像:

.context-menu .accelerator-text{
    -fx-graphic: none;
}
Run Code Online (Sandbox Code Playgroud)

这是将每个-accelerator-text的-fx-graphic设置为“ none”。因此,它基本上会再次删除该图像。

现在,您将在菜单项文本前面只有图标,而在加速器文本之前没有图标。为了给您一个具体的想法,我为您做了一个小例子: 样品

这是以下CSS样式表添加到我的菜单栏中,以及相应的CSS样式类添加到我的menu-Items中的结果:

.newIcon > .label{
    -fx-graphic: url("px16/file.png");
}
.openIcon > .label{
    -fx-graphic: url("px16/folderEmpty.png");
}
.closeIcon > .label{
    -fx-graphic: url("px16/minus.png");
}
.saveIcon > .label{
    -fx-graphic: url("px16/save.png");
}
.saveAsIcon > .label{
    -fx-graphic: url("px16/folder.png");
}
.quitIcon > .label{
    -fx-graphic: url("px16/error.png");
}
.context-menu .accelerator-text{
    -fx-graphic: none;
}
Run Code Online (Sandbox Code Playgroud)

这是我在StackOverflow上的第一个答案,希望这对某人有所帮助。