我收到有关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());
});
答案 0 :(得分:1)
这是一个幸运的猜测,因为你没有发布整个班级,但鉴于我得到了同样的错误,这里是我可能解决方法如何解决它:
我已将您的代码粘贴到我的IDE(NetBeans)上,然后使用Fix Imports
,创建了scheduling
类(顺便说一下,您应该使用Java命名约定),我可以重现你的错误:
然后,看着进口,我意识到有些不合时宜的东西:
import javafx.scene.control.TreeTableColumn.CellEditEvent;
看看导入是如何修复的,滚动我发现了罪魁祸首:
显然这是不正确的,因为你有一个TableColumn
,所以只需要修复它:
import javafx.scene.control.TableColumn.CellEditEvent;
错误已经解决。
所以你必须检查你的进口并确保你有正确的进口。