我一直试图禁用javafx.scene.control.ColorPicker
而不在我的UI中调暗它。这意味着我希望它看起来像启用(启用外观),但只是不响应任何命令,也不显示鼠标单击上的颜色表(实际上已禁用)。根据系统状态,此行为可与正常行为互换(即,有时颜色选择器将表现得正常)。
我已经尝试了一些选项,但似乎都没有,如下所示:
1。使用setEditable(boolean)
:
myColorPicker.setEditable(false);
这只是不起作用,颜色选择器仍然可以编辑。
2。同时使用setDisable(boolean)
和setOpacity(double)
:
myColorPicker.setDisable(true);
myColorPicker.setOpacity(1.0f);
这使得颜色选择器实际上不可编辑,并且生成的颜色选择器看起来比仅使用setDisable(true)
的颜色略微暗淡,但仍然不是启用的颜色选择器的外观。
第3。使用空实现覆盖onMouseClick()
,onMousePressed()
和onMouseReleased()
:
myColorPicker.setOnMouseClicked(new EventHandler <MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Mouse clicked.");
}
});
myColorPicker.setOnMousePressed(new EventHandler <MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Mouse pressed.");
}
});
myColorPicker.setOnMouseReleased(new EventHandler <MouseEvent>() {
public void handle(MouseEvent event) {
System.out.println("Mouse released.");
}
});
上面的方法在我的控制台上打印了相应的消息,但是颜色选择器仍然响应鼠标点击(显示颜色表并允许选择新颜色)。还试图覆盖setOnAction(EventHandler<ActionEvent>)
,但效果相同(当我点击颜色选择器时没有控制台打印)。
这是我的FXML的摘录:
<VBox fx:controller="mypackage.ElementConfigWidget"
xmlns:fx="http://javafx.com/fxml" fx:id="root" styleClass="elementConfigPane">
<HBox id="elementInfo">
(...)
<ColorPicker fx:id="elementColor" styleClass="elementColor" />
</HBox>
(...)
</VBox>
这是我的CSS exerpt:
.elementColor {
-fx-cursor: hand;
-fx-background-color: #fff;
-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;
-fx-pref-width: 50.0;
}
我实际上期望setEditable(boolean)
通过保持元素外观并忽略输入操作来解决我的问题。我错过了什么?
非常感谢!
答案 0 :(得分:1)
我设法通过一些CSS实现它 。还需要setDisable(true)和opacity为1.0
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
ColorPicker myColorPicker = new ColorPicker();
myColorPicker.setDisable(true);
myColorPicker.setOpacity(1.0);
Scene s = new Scene(myColorPicker);
s.getStylesheets().add(this.getClass().getResource("test.css").toExternalForm());
primaryStage.setScene(s);
primaryStage.show();
}
}
和test.css
.color-picker > .label:disabled {
-fx-opacity : 1.0;
}