我正在使用JavaFX和Scene Builder在应用程序中执行一些功能

我可以在单击“JFoenix拾色器”时选择一种颜色,然后该颜色将应用于我的标签背景

我使JFOenix拾色器看起来像一个图标。我已将“拾色器”的标准外观更改为我的图像

问题1:
第一次启动程序时,拾色器完全充满了白色,然后将鼠标移到它上面时,它看起来像我的图标。

问题2:当我单击带有颜色选择器的图标时,波纹效果可以工作,但单击颜色选择器时不需要任何波纹效果或动画

问题3:JFoenix拾色器还将所选颜色应用于其自身的背景,当我再次将鼠标移到其上方时,它再次出现在图标图像上

问题4:
将“颜色选择器”放置在堆栈窗格中时,“颜色选择器”对话框窗口仅在单击图标左侧时出现,看起来像“颜色选择器”图标的右侧已禁用,但是我需要在单击时显示“颜色选择器”对话框窗口到“颜色选择器”图标的任何部分

我正在搜索JFoniex拾色器的CSS文件,但是没有任何文档说明如何在CSS中正确自定义拾色器。

拜托,尽我所能

*我有个想法使用切换按钮(我知道如何根据自己的需要对其进行自定义),然后将“颜色选择器”向后放置此切换按钮并使不透明度变为0。但是我不知道如何使“颜色选择器”对话框窗口打开单击切换按钮。有任何想法吗?

我使用单击颜色选择器以用颜色填充标签背景时所调用的方法。

控制器类:

@FXML  private Label category1;
@FXML  private JFXColorPicker colorPickerCategory;

@FXML
  void changeCategoryColor(ActionEvent event) {

    Color selectedColor = colorPickerCategory.getValue();
    category1.setBackground(new Background(new BackgroundFill(Paint.valueOf(selectedColor.toString()), CornerRadii.EMPTY, Insets.EMPTY)));

  }

CSS:
.jfx-color-picker .color-box {
    -fx-background-image: url("resources/palette.png");
    -fx-background-color: transparent;
    -fx-background-repeat: no-repeat;
    -fx-background-position: center;
    -fx-background-size: contain;
}


.jfx-color-picker:armed,
.jfx-color-picker:hover,
.jfx-color-picker:focused,
.jfx-color-picker {
    -fx-background-color: transparent, transparent, transparent, transparent;
    -fx-background-insets: 0px;
}


.color-picker > .color-picker-label > .picker-color > .picker-color-rect {
    -fx-stroke: null;
    -fx-fill : null;
}

.color-picker {
    -fx-background-color: transparent;
    -fx-color-label-visible: false;
}
.color-picker  .color-picker-label  .picker-color  {
    -fx-alignment: center;
}

.color-picker .color-picker-label .text {
    -fx-fill: transparent;
}

.jfx-color-picker:default{
    -fx-background-color: transparent;
}

Video

java - 如何更改JFoenix拾色器库的CSS样式?-LMLPHP场景构建器屏幕

最佳答案

JFXColorPicker的皮肤类包含一个窗格和一个标签,它们分别具有样式类color-labelcolor-box。标签包含在窗格中。

以下css显示不带有背景(=所选颜色)的图标和不带有文本(=所选颜色的十六进制值)的

.jfx-color-picker {
    -fx-focus-traversable: false;
    -fx-color-label-visible: false;
}

.jfx-color-picker .color-label {
    -fx-background-image: url("resources/palette.png");
    -fx-background-color: transparent;
    -fx-background-repeat: no-repeat;
    -fx-background-position: center;
    -fx-background-size: contain;
}

.jfx-color-picker .color-box {
    visibility: hidden;
}

第一部分禁用文本。中间部分负责图标的显示。最后一部分禁用背景。

使用该css不会发生观察到的问题:
  • 没有白色,没有隐藏的图标
  • 可以可选地(以编程方式)禁用涟漪效应
  • 可选的颜色可选不显示在后台
  • StackPane
  • 没有问题

    我的测试用例由一个BorderPane组成,在中间包含一个StackPaneStackPane包含JFXColorPicker和3个按钮。 BorderPane的右侧部分包含一个窗格,其颜色由颜色选择器控制。
    下图显示了Scenebuilder中的FXML(图1),刚启动后的应用程序(图2),单击颜色选择器后的应用程序(图3)和颜色更改后的应用程序(图4)。 ):

    图。1:

    java - 如何更改JFoenix拾色器库的CSS样式?-LMLPHP

    图2:

    java - 如何更改JFoenix拾色器库的CSS样式?-LMLPHP

    图3:

    java - 如何更改JFoenix拾色器库的CSS样式?-LMLPHP

    图4:

    java - 如何更改JFoenix拾色器库的CSS样式?-LMLPHP

    以下css显示带有背景
    (=所选颜色)的图标和带有波纹但带有文本(=所选颜色的十六进制值)的
    .jfx-color-picker {
        -fx-focus-traversable: false;
        -fx-color-label-visible: false;
    }
    
    .jfx-color-picker .color-label {
        -fx-background-image: url("resources/palette.png");
        -fx-background-color: transparent;
        -fx-background-repeat: no-repeat;
        -fx-background-position: center;
        -fx-background-size: contain;
    }
    

    下图显示了颜色更改后的应用程序。

    图5:

    java - 如何更改JFoenix拾色器库的CSS样式?-LMLPHP

    为了显示带有背景
    (=所选颜色),但没有波纹
    和没有文本(=所选颜色的十六进制值)的和图标
    必须将以下方法添加到控制器:
    public void disableRipple() {
        JFXRippler rippler = (JFXRippler) jfxColorPicker.lookup("JFXRippler");
        rippler.setDisable(true);
    }
    

    其中jfxColorPicker表示FXML中的颜色选择器。

    执行main -method后,必须在show -method 中调用该方法:
    FXMLLoader loader = new FXMLLoader(getClass().getResource("<path to FXML>"));
    ...
    primaryStage.show();
    ...
    Controller controller = loader.getController();
    controller.disableRipple();
    
    JFXColorPicker的皮肤类位于JFoenix-master\jfoenix\src\main\java\com\jfoenix\skins\JFXColorPickerSkin.java
    在这里可以研究控件的交互作用。

    关于java - 如何更改JFoenix拾色器库的CSS样式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53804624/

    10-10 02:20