如何在打印时禁用javafx中的父节点?

时间:2019-03-01 19:06:50

标签: java javafx printing fxml scenebuilder

我创建了一个程序,该程序使用许多fxml / javafx来解码base64字符串并显示图像。我正在实现一个“打印图像”按钮,该按钮将从imageView节点获取数据并将其发送到打印机。

我想单击“打印图像”按钮以在打印过程中禁用所有按钮。到目前为止,尽管尝试了一些操作,我还是无法完成此操作:

这是尝试简单地禁用单个按钮的尝试:

// upon Print Image button pressed
UploadButton.setDisable(true);
if (printingComplete) {
UploadButton.setDisable(false);
}

这不起作用。我没有任何错误。它只是不会禁用有问题的按钮。

这是尝试获取父节点并将其禁用,从而禁用所有按钮的尝试:

// upon Print Image button pressed
Node node = imageDisplay;
    while (node != null) {
    node = node.getParent();
    }
    Node parentNode = node;
    parentNode.setDisable(true);

这也不起作用。没有错误,只是按钮功能没有变化。

我在哪里错了?

编辑:解决方案发表在评论中

1 个答案:

答案 0 :(得分:0)

尝试使用以下代码禁用容器中的 ALL 按钮(在我的情况下为 root ):

root.getChildren().forEach(node -> {
            if(node instanceof Button){
                node.setDisable(true);
            }
        });

执行相同的操作以启用它们,只需替换

node.setDisable(true);

使用

node.setDisable(false);

注意:我正在我的应用程序中实现类似的功能,您通过“禁用按钮”来“禁用功能”的想法可能效果不佳,阶段中可能还有其他节点触发事件。
我实现“禁用”功能的方式:

  1. 在所有其他容器(在我的情况下为AnchorPane)上方创建一个空容器(不可见)
  2. 使用css将其透明度设置为%(在我的情况下为灰色滤镜):

-fx-background-color:线性渐变(向右,rgba(72,85,99,0.69),rgba(41,50,60,0.69));

  1. 要禁用所有其他事件时,请创建此AnchorPane 可见(覆盖所有节点)并为用户提供视觉效果。

  2. 完成后,禁用其可见性。

这样,如果您使用的是未经装饰的舞台,则将在窗口中覆盖X按钮,因此用户无法在完成过程之前关闭应用程序(除非他们按键盘上的 ALT + F4 键)。
希望对您有帮助!