1
我有一個表格視圖,我手動添加行,並且我想知道在添加行之前如果將添加它的記錄已經在表格中。如何確定記錄是否存在於javafx的tableview中
我有一個表格視圖,我手動添加行,並且我想知道在添加行之前如果將添加它的記錄已經在表格中。如何確定記錄是否存在於javafx的tableview中
James_D在說你必須在你的課堂上添加@Override public boolean equals(Object obj)
方法。這將允許您使用默認的列表功能,所以你可以做這樣的事情在你的控制器代碼
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;
}
}
這將是一個propper的路要走,但是如果你不能改變對象類,你總是可以使用這個或類似的幫助函數。
public static boolean contains(TableView<MyObject> table, MyObject obj){
for(MyObject item: table.getItems())
if (item.getName().equals(obj.getName()))
return true;
return false;
}
只是做'如果(tableView.getItems()。包含(...))'。確保你的模型類適當地定義了「equals(...)」。 –
你能告訴我一個例子嗎? –
@James_D你能告訴我一個例子嗎? –