如何在没有模拟外观的情况下禁用 JavaFX ColorPicker?
How to make JavaFX ColorPicker disabled without dim appearence?
我一直在尝试禁用 javafx.scene.control.ColorPicker
而不是在 UI 中调暗它。这意味着我希望它看起来已启用(启用外观),但只是不响应任何命令,也没有在鼠标单击时显示 table 颜色(实际上已禁用)。根据系统状态,此行为可与正常行为互换(即,有时颜色选择器会正常行为)。
我尝试了一些选项,但 none 似乎有效,如下所示:
1.使用 setEditable(boolean)
:
myColorPicker.setEditable(false);
这是行不通的,颜色选择器仍然是 editable。
2。 setDisable(boolean)
和 setOpacity(double)
一起使用:
myColorPicker.setDisable(true);
myColorPicker.setOpacity(1.0f);
这使得颜色选择器实际上不是 editable,并且生成的颜色选择器看起来比仅使用 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.");
}
});
上述方法在我的控制台上打印了相应的消息,但颜色选择器仍然响应鼠标单击(显示颜色 table 并允许选择新颜色)。还尝试覆盖 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 摘录:
.elementColor {
-fx-cursor: hand;
-fx-background-color: #fff;
-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;
-fx-pref-width: 50.0;
}
我实际上希望 setEditable(boolean)
通过保持元素出现并忽略输入操作来解决我的问题。我错过了什么?
非常感谢!
我设法用一些 CSS 实现了它
.此外,您还需要将 setDisable(true) 和不透明度设置为 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;
}
我一直在尝试禁用 javafx.scene.control.ColorPicker
而不是在 UI 中调暗它。这意味着我希望它看起来已启用(启用外观),但只是不响应任何命令,也没有在鼠标单击时显示 table 颜色(实际上已禁用)。根据系统状态,此行为可与正常行为互换(即,有时颜色选择器会正常行为)。
我尝试了一些选项,但 none 似乎有效,如下所示:
1.使用 setEditable(boolean)
:
myColorPicker.setEditable(false);
这是行不通的,颜色选择器仍然是 editable。
2。 setDisable(boolean)
和 setOpacity(double)
一起使用:
myColorPicker.setDisable(true);
myColorPicker.setOpacity(1.0f);
这使得颜色选择器实际上不是 editable,并且生成的颜色选择器看起来比仅使用 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.");
}
});
上述方法在我的控制台上打印了相应的消息,但颜色选择器仍然响应鼠标单击(显示颜色 table 并允许选择新颜色)。还尝试覆盖 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 摘录:
.elementColor {
-fx-cursor: hand;
-fx-background-color: #fff;
-fx-focus-color: transparent;
-fx-faint-focus-color: transparent;
-fx-pref-width: 50.0;
}
我实际上希望 setEditable(boolean)
通过保持元素出现并忽略输入操作来解决我的问题。我错过了什么?
非常感谢!
我设法用一些 CSS 实现了它 .此外,您还需要将 setDisable(true) 和不透明度设置为 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;
}