【问题标题】:How to make JavaFX ColorPicker disabled without dim appearence?如何在没有 sim 外观的情况下禁用 JavaFX ColorPicker?
【发布时间】:2017-09-17 16:46:57
【问题描述】:

我一直在尝试禁用 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&lt;ActionEvent&gt;),但效果相同(除了单击颜色选择器时没有控制台打印)。

这是我的 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) 能够通过保持元素外观并忽略输入操作来解决我的问题。我错过了什么?

非常感谢!

【问题讨论】:

    标签: javafx-2 color-picker


    【解决方案1】:

    我设法用一些 CSS 来实现它 .Also你需要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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-14
      • 2020-10-01
      • 1970-01-01
      相关资源
      最近更新 更多