gpt4 book ai didi

javafx - 如何确定记录是否存在于 javafx 的 TableView 中

转载 作者:行者123 更新时间:2023-12-02 00:59:15 25 4
gpt4 key购买 nike

我有一个手动添加行的 TableView ,我想在添加行之前知道要添加的记录是否已经在表中。

最佳答案

James_D 说你必须在你的类中添加 @Override public boolean equals(Object obj) 方法。这将允许您使用默认的 List contains() 函数,这样您就可以在 Controller 代码中执行类似的操作

if(!table.getItems().contains(newObj))
table.getItems().add(newObj);

示例代码如下:

public void start(Stage primaryStage) throws Exception {
ObservableList<MyObject> items = FXCollections.observableArrayList(
new MyObject("Robert"),
new MyObject("Nick"),
new MyObject("John"),
new MyObject("Kate"));

TableView<MyObject> table = new TableView<>();
table.setItems(items);
TableColumn<MyObject, String> column = new TableColumn<>("Column Name");
column.setCellValueFactory(new PropertyValueFactory<>("name"));
table.getColumns().addAll(column);
table.setItems(items);

TextField textField = new TextField();
Button button = new Button("Add");
button.setOnMouseClicked(event -> {
MyObject newObj = new MyObject(textField.getText());
if(!table.getItems().contains(newObj)){
table.getItems().addAll(newObj);
}
});

VBox root = new VBox();
root.getChildren().addAll(table, textField, button);

primaryStage.setScene(new Scene(root, 600, 475));
primaryStage.show();
}

public static class MyObject {
private String name;

public MyObject(String name) {
setName(name);
}

@Override
public boolean equals(Object obj) {
return obj instanceof MyObject &&
((MyObject) obj).name.equals(name);
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

这将是一个合适的方法,但如果你不能改变对象类,你总是可以使用这个或类似的辅助函数。

  public static boolean contains(TableView<MyObject> table, MyObject obj){
for(MyObject item: table.getItems())
if (item.getName().equals(obj.getName()))
return true;

return false;
}

enter image description here

关于javafx - 如何确定记录是否存在于 javafx 的 TableView 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30610011/

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