2015-06-03 34 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

相关问题