更改disableProperty()函数的颜色/如何禁用单击Stage

时间:2018-06-11 10:09:19

标签: java javafx

你好,这是我第一次问堆栈。我遇到了disablebleProperty()函数的问题。它让我Stage深灰色,看起来很糟糕。如何运行某些Task时,如何禁用单击我的舞台,如下面的代码所示:

buttonName.setOnAction((event) -> {

    Task task = new Task() {

        @Override
        protected Integer call() throws Exception {
            try {

                buttonName.getScene().setCursor(Cursor.WAIT);
                buttonName.getScene().getRoot().disableProperty().bind(primaryStage.getScene().cursorProperty().isEqualTo(Cursor.WAIT));

                anotherFunction();
            } catch (Exception ex) {

                ex.printStackTrace();
            } finally {
                buttonName.getScene().setCursor(Cursor.DEFAULT);
            }
            return null;
        }
    };
    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
});

1 个答案:

答案 0 :(得分:1)

您不应该从JavaFX应用程序线程以外的线程更新ui。由于interface SomeProps { text: string; label?: string; } class SomeClass extends React.Component<SomeProps> { ... } 在单独的线程上运行,因此您不应该在那里运行代码。同样绑定到curser属性而不是调用Task.call似乎是一个坏主意,特别是因为你永远不会绑定属性。

使用setDisable(false)的事件处理程序来处理任务的成功完成。 (onSucceededonFailed可用于完成任务的不同方式,这在您发布的代码段中不会发生。)

onCanceled

要禁用场景中的其他控件,您可以改为禁用/重新启用场景的根目录:

buttonName.setOnAction((event) -> {
    buttonName.getScene().setCursor(Cursor.WAIT);
    buttonName.setDisable(true);
    Task<Void> task = new Task<Void>() {

        @Override
        protected Void call() throws Exception {
            try {
                anotherFunction();
            } catch (Exception ex) {

                ex.printStackTrace();
            }
            return null;
        }
    };
    task.setOnSucceeded(evt -> {
        buttonName.getScene().setCursor(Cursor.DEFAULT);
        buttonName.setDisable(true);
    });
    Thread th = new Thread(task);
    th.setDaemon(true);
    th.start();
});

为了防止灰色外观看起来JavaFX应用于禁用的控件(将不透明度设置为0.4),您可以应用具有更高优先级的不同不透明度,例如通过设置代码

的不透明度
buttonName.getScene().getRoot().setDisable(newValue);

或使用自定义样式表应用样式

的style.css

buttonName.setOpacity(1);

场景初始化

*:disabled {
    -fx-opacity: 1;
}