我创建了一个程序,该程序使用许多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);
这也不起作用。没有错误,只是按钮功能没有变化。
我在哪里错了?
编辑:解决方案发表在评论中
答案 0 :(得分:0)
尝试使用以下代码禁用容器中的 ALL 按钮(在我的情况下为 root ):
root.getChildren().forEach(node -> {
if(node instanceof Button){
node.setDisable(true);
}
});
执行相同的操作以启用它们,只需替换
node.setDisable(true);
使用
node.setDisable(false);
注意:我正在我的应用程序中实现类似的功能,您通过“禁用按钮”来“禁用功能”的想法可能效果不佳,阶段中可能还有其他节点触发事件。
我实现“禁用”功能的方式:
-fx-background-color:线性渐变(向右,rgba(72,85,99,0.69),rgba(41,50,60,0.69));
要禁用所有其他事件时,请创建此AnchorPane 可见(覆盖所有节点)并为用户提供视觉效果。
完成后,禁用其可见性。
这样,如果您使用的是未经装饰的舞台,则将在窗口中覆盖X按钮,因此用户无法在完成过程之前关闭应用程序(除非他们按键盘上的 ALT + F4 键)。
希望对您有帮助!