2015-06-03 35 views
1

我有一個表格視圖,我手動添加行,並且我想知道在添加行之前如果將添加它的記錄已經在表格中。如何確定記錄是否存在於javafx的tableview中

+0

只是做'如果(tableView.getItems()。包含(...))'。確保你的模型類適當地定義了「equals(...)」。 –

+0

你能告訴我一個例子嗎? –

+0

@James_D你能告訴我一個例子嗎? –

回答

2

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; 
    } 

enter image description here

相關問題