JavaFX表视图 - 比较和突出显示单元格

时间:2017-08-02 18:40:49

标签: javafx-8

我是Javafx的新手,希望您能帮助解决以下问题:

我有两个tableviews,我想比较两者之间的列值,并突出显示其中一个表的单元格,如果值不同。 (假设 - 两个表具有相同的列数,将行限制为表中的最小内容)

例如: 表1有 column1 column2 column3 1美国纽约

表2有 column1 column2 column3 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);
                                   }
                               }
                           }
                       };
                   });
               }

            }
        }
    }

1 个答案:

答案 0 :(得分:0)

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

@FXML     public void onvalidatebutton(){

MyDataType