如果您观察下图中颜色选择器的场景图:您只对第一个 GridPane 感兴趣。
您需要关闭所有其他不需要的节点的可见性。由于节点驻留在 VBox 中,因此仅关闭可见性是不够的。间距仍然会显示,因此您还需要关闭节点的托管属性(以跳过布局计算)。
为此,您可以在 CSS 文件中包含以下 css 样式。
.color-palette > #ColorCustomizerColorGrid,
.color-palette > .label,
.color-palette > .separator,
.color-palette > .hyperlink{
visibility: hidden;
-fx-managed: false;
}
Run Code Online (Sandbox Code Playgroud)
添加上述更改后,颜色选择器的行为如下:
更新:
如果您使用的 javafx 版本未-fx-managed实现,您可以尝试以下方法手动关闭所需的节点可见性和托管属性。
但为此,您需要创建自定义皮肤来访问弹出内容。在此方法中您不需要进行任何 CSS 更改。
ColorPicker colorPicker = new ColorPicker(Color.RED) {
@Override
protected Skin<?> createDefaultSkin() {
return new ColorPickerSkin(this) {
List<String> styles = List.of("label", "separator", "hyperlink");
@Override
public void show() {
// Turn off the visibility of required nodes before showing
((Region) getPopupContent().lookup(".color-palette")).getChildrenUnmodifiable().forEach(node -> {
if ("ColorCustomizerColorGrid".equals(node.getId()) || node.getStyleClass().stream().anyMatch(styles::contains)) {
node.setVisible(false);
node.setManaged(false);
}
});
super.show();
}
};
}
};
Run Code Online (Sandbox Code Playgroud)
注意:如果您想在多个地方实现这一点,您可以为控件和皮肤创建单独的类