2017-08-02 61 views
0

我很新的JavaFX的,想你在解决以下帮助:的JavaFX Tableviews - 比较和突出显示单元格

我有两个tableviews,和我想的两个亮点之间的列值进行比较其中一个表格的单元格,如果值不同。 (假设 - 两个表具有相同的列数,限制行的表中的最小含量)

例如: 表1具有 列1列2栏3 1美国纽约

表2具有 列1列2栏3 1美国华盛顿

第二个表格最后一栏应该用TEXTFILL

我有这样的伪代码被突出显示,似乎没有工作,虽然

  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

我找到了解决给定问题。我的代码是 - –

回答

0

我找到了解决给定的问题。

@FXML 公共无效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(""); 
        } 
      } 
     }; 
    }); 
} 
相关问题