当前位置: 首页 > 面试题库 >

是否可以在JavaFX中创建动态Bindings.OR?

满俊楠
2023-03-14
问题内容

让我们考虑以下情况。有一个Pane parentPane,有一个Pane firstChildPane, secondChildPane, thirdChildPane ...。子窗格将添加到父窗格。考虑到可以动态地添加和删除子窗格而没有任何限制和顺序的情况下,如何才能仅在可见子窗格的情况下使parentPane可见。当然childPane的可见状态也可以随时更改。是否可以创建动态Bindings.OR,以便我可以动态向其添加/删除子可见属性?如果是,那怎么办?如果没有,那么在这种情况下使用什么解决方案?


问题答案:

您可以按照以下方式尝试操作:

// list that fires updates if any members change visibility:
ObservableList<Node> children = 
    FXCollections.observableArrayList(n -> new Observable[] {n.visibleProperty()});
// make the new list always contain the same elements as the pane's child list:
Bindings.bindContent(children, parentPane.getChildren());
// filter for visible nodes:
ObservableList<Node> visibleChildren = children.filter(Node::isVisible);
// and now see if it's empty:
BooleanBinding someVisibleChildren = Bindings.isNotEmpty(visibleChildren);
// finally:
parentPane.visibleProperty().bind(someVisibleChildren);

另一种方法是BooleanBinding直接创建自己的:

Pane parentPane = ... ;

BooleanBinding someVisibleChildren = new BooleanBinding() {


    {
        parentPane.getChildren().forEach(n -> bind(n.visibleProperty()));

        parentPane.getChildren().addListener((Change<? extends Node> c) -> {
            while (c.next()) {
               c.getAddedSubList().forEach(n -> bind(n.visibleProperty()));
               c.getRemoved().forEach(n -> unbind(n.visibleProperty())) ;
            }
        });

        bind(parentPane.getChildren());
    }

    @Override
    public boolean computeValue() {
        return parentPane.getChildren().stream()
            .filter(Node::isVisible)
            .findAny()
            .isPresent();
    }
}

parentPane.visibleProperty().bind(someVisibleChildren);


 类似资料:
  • 我正在写入一个CSV文件,并使用来完成。我有一个bean,它是我的类,我也有一个资源属性,在这里我提供了用于写出项的文件名。 是否可以将日期和时间附加到文件名? 现在我告诉它写入一个名为report.csv的文件,而不是我希望它写入一个名为report-7-2-2014-16-03.csv的文件 以下是作者的XML配置

  • 问题内容: 我想在PHP中创建一个静态类,并使其行为像在C#中一样,所以 在第一次调用类时会自动调用构造函数 无需实例化 这种东西… 问题答案: 您可以在PHP中拥有静态类,但它们不会自动调用构造函数(如果尝试调用,则会收到错误)。 因此,您必须创建一个函数并在每个方法中调用它:

  • 问题内容: 假设我们有Java代码: 那会跑吗?进一步说明,如果我们尝试这样的操作: 那么arr1将是一个等效于2D的2D数组: 怎么样:如果我们直到运行时才知道该数组的维数怎么办? 编辑:如果这有帮助(我确定会…),我们正在尝试从形式为String的字符串解析未知维度的数组 要么 等等 Edit2:万一像我这样愚蠢的人尝试使用此垃圾,这是一个至少可以编译并运行的版本。逻辑是否合理完全是另一个问题

  • 问题内容: 如何在Python中使类或方法抽象? 我尝试像这样重新定义: 但是现在,如果我创建一个像这样继承的类: 那么我也无法实例化,因为它调用了其超类的方法。 有没有更好的方法来定义抽象类? 问题答案: 使用该模块创建抽象类。使用装饰器来声明方法摘要,并根据您的Python版本使用以下三种方式之一声明类摘要。 在Python 3.4及更高版本中,您可以从继承。在Python的早期版本中,您需要

  • 问题内容: 例如,当我创建一个新类时,我得到以下信息: 这样放置支架时,我 讨厌 它。有没有一种方法可以使它创建如下内容: 问题答案: 只需遵循以下步骤: 导航 导航 选择以下 语言:Java 分类:大括号 在“类声明,方法声明等”中 大括号位置:新行

  • 问题内容: 我正在尝试在Spark中实现K最近邻算法。我想知道是否可以使用嵌套的RDD。这将使我的生活更加轻松。考虑以下代码片段。 目前,此嵌套设置出现错误(我可以在此处发布完整日志)。可以放拳头吗?谢谢 问题答案: 不,这是不可能的,因为RDD的项必须可序列化,而RDD不可序列化。这是有道理的,否则您可能会通过网络传输整个RDD,如果其中包含大量数据,这将是一个问题。如果它不包含很多数据,则可能