2017-02-28 2 views
0

Ich habe eine Tableview mit Zeilen, die gefiltert werden, je nachdem, was Sie in einem Textfield-Typ, die alle Spalten suchen, mit diesem Stück Code:Get ungefilterten Java FX Tableview Spalten

FilteredList<CommandeFX> filteredData = new FilteredList<>(data, p -> true); 

    // 2. Set the filter Predicate whenever the filter changes. 
    filterField.textProperty().addListener((observable, oldValue, newValue) -> { 
     filteredData.setPredicate(commande -> { 
      // If filter text is empty, display all persons. 
      if (newValue == null || newValue.isEmpty()) { 
       return true; 
      } 

      // Compare first name and last name of every person with filter text. 
      String lowerCaseFilter = newValue.toLowerCase(); 

      if (String.valueOf(commande.getCodeCommande()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; 
       // Filter matches first name. 

      } else if (String.valueOf(commande.getCMD()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getClient()).toLowerCase().contains(lowerCaseFilter)) {         
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getQuantite()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getPrixCommande()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getDateCommande()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getModified()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 
      else if (String.valueOf(commande.getValide()).toLowerCase().contains(lowerCaseFilter)) { 
       return true; // Filter matches last name. 
      } 

      return false; // Does not match. 
     }); 
    }); 


    // 3. Wrap the FilteredList in a SortedList. 
    SortedList<CommandeFX> sortedData = new SortedList<>(filteredData);  

    // 4. Bind the SortedList comparator to the TableView comparator. 
    sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty()); 
    // 5. Add sorted (and filtered) data to the table. 
    tableCommandes.setItems(sortedData); 

Kein Problem so weit, ich benutze auch diese Zeilen Code das Styling (Farbe in meinem Fall) bestimmter Spalten auf einem Spaltenwert in Abhängigkeit zu ändern (die Spalte mit dem Titel ist „reste“):

reste.setCellFactory(column -> { 
    return new TableCell<CommandeFX, Number>() { 
     @Override 
     protected void updateItem(Number item, boolean empty) { 
      super.updateItem(item, empty); 

      setText(empty ? "" : getItem().toString()); 
      setGraphic(null); 

      TableRow<BonFX> currentRow = getTableRow(); 

      if (!isEmpty()) { 

       if(Float.valueOf((float) item)>0) 
        currentRow.setStyle("-fx-background-color:lightcoral"); 

      } 
     } 
    }; 
}); 

Wenn ich die Zeilen filtern, sage ich hatte drei Reihen alle rot gefärbt, nach dem Filtern habe ich eine Reihe links angezeigt und colore d in rot, großartig! Das Problem ist, dass die zwei unsichtbaren Zeilen immer noch rot angezeigt werden, obwohl sie nicht angezeigt werden! Wie kann man die Zeilen, die sichtbar sind, deaktivieren? Vielen Dank

Antwort

0

Wenn Ihre Zeile leer ist, dann die Standardfarbe festgelegt:

reste.setCellFactory(column -> { 
    return new TableCell<CommandeFX, Number>() { 
     @Override 
     protected void updateItem(Number item, boolean empty) { 
      super.updateItem(item, empty); 

      TableRow<BonFX> currentRow = getTableRow(); 

      if (empty || item == null) { 
       setText(""); 
       setGraphic(null); 
       currentRow.setStyle("-fx-background-color:(****your default color****)"); 
      } else { 
       setText(getItem().toString()); 
      } 

      if (!isEmpty()) { 
       if (Float.valueOf((float) item) > 0) { 
        currentRow.setStyle("-fx-background-color:lightcoral"); 
       } 

      } 
     } 
    }; 
}); 
+0

Sie so vielen Dank! –