2017-08-02 3 views
0

je suis tout à fait nouveau à JavaFX, et je voudrais votre aide pour résoudre le ci-dessous:JavaFX Tableviews - Comparer les prix et mettre en évidence les cellules

J'ai deux tableviews, et je voudrais comparer les valeurs de la colonne entre les deux et mettre en évidence la cellule de l'une des tables, si les valeurs sont différentes. (Assomption - les deux tables ont le même nombre de colonnes, ce qui limite les lignes au contenu minimal entre les tables)

ex: tableau 1 a colonne1 colonne2 colonne3 1 Amérique Newyork

tableau 2 a colonne1 colonne2 colonne3 1 Amérique Washington

La deuxième table dernière colonne doit être mis en évidence avec un TEXTFILL

J'ai ce code pseudo, ne semble pas fonctionner si

  int colsize1= tableview1.getColumns().size(); 
    int colsize2= tableview2.getColumns().size(); 

    if(colsize1 != colsize2) { 

     alert("number of columns do not match, cannot be validated"); 
     return; 
    } 

    ObservableList<ObservableList<String>> da1 = FXCollections.observableArrayList(); 
    ObservableList<ObservableList<String>> da2 = FXCollections.observableArrayList(); 

    da1.addAll(tableview1.getItems()); 
    da2.addAll(tableview2.getItems()); 

    int size = Math.min(da1.size(), da2.size()); 

     for(int i = 0; i < size; i++) { 

      for (int j = 0; j < colsize1; j++) { 

       if(!(tableview1.getItems().get(i).get(j).equals(tableview2.getItems().get(i).get(j)))) { 
        String value = tableview1.getItems().get(i).get(j); 
        String value2 = tableview2.getItems().get(i).get(j); 
        int currentrow = i; 

        TableColumn<TableView<ObservableList<String>>, String> columns = (TableColumn) tableview2.getColumns().get(j); 

        columns.setCellFactory(column -> { 
         return new TableCell<TableView<ObservableList<String>>, String>() { 

          @Override 
          protected void updateItem(String item, boolean empty) { 
           super.updateItem(item, empty); 


           System.out.println("item is " + item + " empty is " + empty); 
           if(empty){ 

            if(value != value2){ 
             this.setStyle("-fx-background-color : yellow"); 
            } 
           } 

           if (!empty) { 

            if((value != item) && currentrow == getTableRow().getIndex()) { 

             // int rowindex = getTableRow().getIndex(); 

             System.out.println(" item is " + item); 

             this.setText(item); 
             this.setTextFill(Color.RED); 
             this.setStyle("-fx-background-color : yellow"); 
            }else { 
             this.setText(item); 
            } 
           } 
          } 
         }; 
        }); 
       } 

      } 
     } 
    } 
+0

J'ai trouvé une solution au problème donné. mon code est - –

Répondre

0

J'ai trouvé une solution au problème donné.

@FXML de public void onvalidatebutton() {

int colsize1 = tableview1.getColumns().size(); 
    int colsize2 = tableview2.getColumns().size(); 

    if (colsize1 != colsize2) { 

     alert("number of columns do not match, cannot be validated"); 
     return; 
    } 

    int size = tableview1.getItems().size(); 

    for (int i = 0; i < size; i++) { 

     for (int j = 0; j < colsize1; j++) { 

      TableColumn columns2 = tableview2.getColumns().get(j); 

      //  String value = tableview1.getItems().get(currentrow).get(j); 

      settingcell(columns2); 
     } 
    } 

    } 


private void settingcell(TableColumn<ObservableList<String>,String> column) { 

    column.setCellFactory(col -> { 
     return new TableCell<ObservableList<String>, String>() { 

      @Override 
      protected void updateItem(String item, boolean empty) { 
       super.updateItem(item, empty); 

       if (!empty) { 

        int ind = getTableView().getVisibleLeafIndex(column); 

        // System.out.println(" ind is " + ind); 

        String value = tableview1.getItems().get(this.getIndex()).get(ind); 

        // System.out.println(" value is " + value + " & item is "+ item); 
         if (!(StringUtils.equals(value,item))) { 

          this.setText(item); 
          this.setTextFill(Color.RED); 
          this.setStyle("-fx-background-color : yellow"); 

         } else { 
          this.setText(item); 
         } 
        } 
        else{ 
         this.setText(""); 
        } 
      } 
     }; 
    }); 
}