JavaFX - 摆脱`CustomMenuItem`蓝色突出显示?

时间:2016-03-12 08:22:34

标签: java css javafx

我一直在努力从ContextMenu实施中移除蓝色突出显示。

private void attachContextMenu() {
    CustomMenuItem item = FilterPanel.getInMenuItem(this);
    ContextMenu contextMenu = new ContextMenu();
    contextMenu.getItems().add(item);


    tableColumn.setContextMenu(contextMenu);
}

使用包含VBox我能够将其涂成白色并摆脱大部分蓝色闪光。

filterVBox.setStyle("-fx-background-color: white;");

但我无法弄清楚当用鼠标聚焦时如何让CustomerMenuItem失去蓝色边框。我尝试了以下但是它不起作用

CustomMenuItem item = FilterPanel.getInMenuItem(this);
item.setStyle("-fx-text-fill: white;");

如果您想要全面了解,那么这是PR,但是有人知道如何操纵它消失吗?

通过使用此CSS为整个MenuItem设置每个TableView样式,我能够让它消失。但我想将其专门应用于{em>只是 CustomMenuItem

.menu-item:focused {
   -fx-background-color: transparent;
}

1 个答案:

答案 0 :(得分:2)

由于在ContextMenu获得焦点时发生蓝色突出显示,因此您在此处使用Pseudoclass。在CSS中,伪类用于定义节点的特定状态。典型的状态是悬停,选择,聚焦......

处理此问题的方法是添加一个CSS文件,您可以轻松地将样式设置应用于任何可能的状态。

首先,将样式类应用于ContextMenu(因此使用上下文菜单的其他控件不会受这些设置的影响)。例如,column-filter

private void attachContextMenu() {
    CustomMenuItem item = FilterPanel.getInMenuItem(this);

    ContextMenu contextMenu = new ContextMenu();
    contextMenu.getStyleClass().add("column-filter");

    contextMenu.getItems().add(item);
    tableColumn.setContextMenu(contextMenu);
}

然后将所需的样式规则添加到css文件中:

<强>的style.css

.column-filter .context-menu {
    -fx-background-color: white;
}

.column-filter .context-menu:focused {
    -fx-background-color: white;
}

.column-filter .custom-menu-item {
    -fx-background-color: white;
    -fx-padding: 0;
}

.column-filter .custom-menu-item:focused {
    -fx-background-color: white;
}

最后,您需要将此样式表应用于场景:

scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());

你将摆脱亮点。

TableFilter