如何隐藏 ColorPicker 弹出窗口底部的辅助颜色

雨夜带*_*不带伞 3 javafx

如何隐藏 ColorPicker 弹出窗口底部的辅助颜色。

我查阅了JavaFX CSS文档,但无法解决。

在此输入图像描述 在此输入图像描述

Sai*_*dem 6

如果您观察下图中颜色选择器的场景图:您只对第一个 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)

注意:如果您想在多个地方实现这一点,您可以为控件和皮肤创建单独的类