gpt4 book ai didi

java - 具有条件内容的绑定(bind)标签?

转载 作者:搜寻专家 更新时间:2023-11-01 02:19:24 28 4
gpt4 key购买 nike

我有一个 Label 需要显示 ObservableList 中元素的数量。我有 IntegerBinding 设置,但我还需要根据列表中的元素数量调整 Label 的措辞。

对于下面的 MCVE,如果列表中只有一个元素,它应该显示“列表包含 1 项”。但如果列表为空或包含多个项目,则“项目”需要是复数形式:“列表包含 3 个项目。”

我曾尝试使用三元运算符和 BooleanBinding 来这样做,但两者都没有任何效果,因为三元表达式似乎只被计算一次。单击“添加”按钮不会更改 Label 的“items”部分。


THE CODE

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.IntegerBinding;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class Main extends Application {

ObservableList<String> items = FXCollections.observableArrayList();

private IntegerBinding listSize = Bindings.size(items);

public static void main(String[] args) {
launch(args);
}

@Override
public void start(Stage primaryStage) {

// Simple Interface
VBox root = new VBox(10);
root.setAlignment(Pos.CENTER);
root.setPadding(new Insets(10));

Label label = new Label();

// Bind the label to display a size-aware notification
label.textProperty().bind(
Bindings.concat("The list contains ", listSize,
((items.size() != 1) ? " items!" : " item!"))
);

// Button to add items
Button button = new Button("Add");
button.setOnAction(event -> items.add("new item"));

root.getChildren().addAll(label, button);

// Show the stage
primaryStage.setScene(new Scene(root));
primaryStage.setTitle("Sample");
primaryStage.show();
}
}


当列表大小发生变化时,我是否需要包含一个监听器?

最佳答案

这是较短的等价物:

label.textProperty().bind(Bindings.createStringBinding(
() -> "The list contains " + listSize.get() + ((itemSize.get() != 1) ? " items!" : " item!",
listSize
));

或另一种选择:

label.textProperty.bind(Bindings
.when(listSize.isEqualTo(1))
.then("The list contains 1 item!")
.otherwise(
Bindings.concat("The list contains " + listSize + " items!")
)
);

关于java - 具有条件内容的绑定(bind)标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52693046/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com