为什么获得不兼容的类型:lambda表达式中不兼容的参数类型?

时间:2018-03-17 17:30:57

标签: java javafx lambda

我收到有关lamda表达的错误我不知道为什么会这样做..以下是我的完整课程,之后我会收到错误:

这是一个完整的方法,以防有人需要额外的信息,基本上这个函数将做的只是允许我拖动javafx tableview中的单元格

    private void setCellFactoryForColumns(TableColumn<scheduling, String> col)
{

    col.setCellFactory((TableColumn<scheduling, String> e) -> {
        TableCell<scheduling, String> cell = new TableCell<scheduling, String>() {
            @Override
            public void updateItem(String item, boolean empty) {

                super.updateItem(item, empty);
                if (item == null || empty) {
                    setText(null);
                    setGraphic(null);
                } else {
                    setText(item);
                    setGraphic(null);
                }
            }
        };

        col.setOnEditCommit((CellEditEvent<scheduling, String> t) -> {
            ((scheduling)t.getTableView().getItems().get(
                    t.getTablePosition().getRow())
                    ).setZone1(t.getNewValue());
        });

        cell.setOnDragDetected((MouseEvent event) -> {
            Dragboard db = cell.startDragAndDrop(TransferMode.ANY);

            ClipboardContent content = new ClipboardContent();
            content.putString(cell.getText());
            db.setContent(content);
            cell.setStyle("-fx-background-color: red;"
                        + "-fx-text-fill: white;");
            cell.startEdit();
            cell.setText("Dragged");

            event.consume();
        });

        cell.setOnDragOver((DragEvent event) ->{
            if(event.getGestureSource() != cell &&
                    event.getDragboard().hasString())
            {
                event.acceptTransferModes(TransferMode.MOVE);
                cell.setStyle("-fx-background-color: green;"
                        + "-fx-text-fill: white;");
            }
            event.consume();
        });

        cell.setOnDragEntered((DragEvent event) ->{
           if(event.getGestureSource() != cell &&
                   event.getDragboard().hasString()){
               cell.setStyle("-fx-background-color: yellow;");
           } 
           event.consume();
        });

        cell.setOnDragExited((DragEvent event) -> {
           cell.setStyle("-fx-background-color: grey;");
           event.consume();
        });

        cell.setOnDragDropped((DragEvent event) -> {
            Dragboard db = event.getDragboard();
            boolean success = false;
            if(db.hasString())
            {
                holdData = cell.getText();
                cell.setText(db.getString());
                success = true;
            }

            event.setDropCompleted(success);
            event.consume();
        });

        cell.setOnDragDone((DragEvent event) ->{
           if(event.getTransferMode() == TransferMode.MOVE)
           {
               cell.setText(holdData);
           }
           event.consume();
        });
        return cell;
    });
}

}

这里是错误的代码,它位于 setCellFactoryForColumns()

        col.setOnEditCommit((CellEditEvent<scheduling, String> t) -> {
        ((scheduling)t.getTableView().getItems().get(
                t.getTablePosition().getRow())
                ).setZone1(t.getNewValue());
    });

1 个答案:

答案 0 :(得分:1)

这是一个幸运的猜测,因为你没有发布整个班级,但鉴于我得到了同样的错误,这里是我可能解决方法如何解决它:

我已将您的代码粘贴到我的IDE(NetBeans)上,然后使用Fix Imports,创建了scheduling类(顺便说一下,您应该使用Java命名约定),我可以重现你的错误:

error

然后,看着进口,我意识到有些不合时宜的东西:

 import javafx.scene.control.TreeTableColumn.CellEditEvent;

看看导入是如何修复的,滚动我发现了罪魁祸首:

imports

显然这是不正确的,因为你有一个TableColumn,所以只需要修复它:

 import javafx.scene.control.TableColumn.CellEditEvent;

错误已经解决。

所以你必须检查你的进口并确保你有正确的进口。