当鼠标悬停在 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 为整个 TableView
设置每个 MenuItem
的样式,我能够让它消失。但我想将其专门应用于 只是 CustomMenuItem
。
.menu-item:focused {
-fx-background-color: transparent;
}
最佳答案
由于蓝色突出显示发生在 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 文件中:
样式.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());
你会去掉高光。
关于JavaFX - 摆脱 `CustomMenuItem` 蓝色高亮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35955382/