我正在使用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
场景构建器屏幕
最佳答案
JFXColorPicker
的皮肤类包含一个窗格和一个标签,它们分别具有样式类color-label
和color-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
组成,在中间包含一个StackPane
。 StackPane
包含JFXColorPicker
和3个按钮。 BorderPane
的右侧部分包含一个窗格,其颜色由颜色选择器控制。
下图显示了Scenebuilder中的FXML(图1),刚启动后的应用程序(图2),单击颜色选择器后的应用程序(图3)和颜色更改后的应用程序(图4)。 ):
图。1:
图2:
图3:
图4:
以下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:
为了显示带有背景(=所选颜色),但没有波纹的和没有文本(=所选颜色的十六进制值)的和图标,
必须将以下方法添加到控制器: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/