2015-06-03 2 views
1

У меня есть представление таблицы, в котором я добавляю строку вручную, и я хочу знать, прежде чем добавить строку, если эта запись, которая будет добавлена, уже находится в таблице.Как определить, существует ли запись в tableview в javafx

+0

Просто сделайте 'если (tableView.getItems(). Содержит (...))'. Убедитесь, что ваш класс модели определяет 'equals (...)' соответствующим образом. –

+0

Можете ли вы показать мне пример? –

+0

@James_D Можете ли вы показать мне пример ??? –

ответ

2

James_D заявляет, что вы должны добавить метод в свой класс. Это позволит вам использовать список по умолчанию функцию, так что вы можете просто сделать что-то вроде этого в коде контроллера

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

Смежные вопросы