【问题标题】:lambda expression should be final FOR LOOPlambda 表达式应该是最终的 FOR LOOP
【发布时间】:2019-03-10 11:40:23
【问题描述】:

我正在尝试从活动列表中检索一些项目,以便使用 JavaFX 显示它们,但同时我也希望能够在单击项目按钮时删除这些项目。如何区分我单击了哪个按钮以删除正确的行?我正在尝试将 lambda 表达式分配给按钮,但显然它在 for 循环中不起作用。有关如何解决此问题的任何建议?

   gridPane = new GridPane();

    String path = "image.png";
    items = new ArrayList<>();

    items.add("Activity 1");
    items.add("Activity 2");
    items.add("Activity 3");

    for (int i=0; i<items.size(); i++) {
        gridPane.add(new Text(items.get(i)), 1, i);
        gridPane.add(new JFXButton("", new ImageView(path)),2,i);
        (JFXButton)gridPane.setOnMouseClicked(e -> deleteActivity(gridPane.getRowIndex(i)));
    }

【问题讨论】:

  • 您得到的确切错误是什么?
  • 在 lambda 表达式中使用的变量应该是 final 或者实际上是 final 引用最后一行中的“i”
  • 在循环内定义一个变量int ii = i;,并在lambda中使用它。
  • @AndyTurner 现在我得到“不可转换的类型;由于 JFXButton 转换,无法将 'void' 转换为 'com.jfoenix.controls.JFXButton'”

标签: java intellij-idea javafx lambda


【解决方案1】:

我假设你想要:

JFXButton button = new JFXButton("", new ImageView(path);   
gridPane.add(button),2,i);
button.setOnMouseClicked(e -> deleteActivity(gridPane.getRowIndex(i)));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2015-12-20
    • 1970-01-01
    相关资源
    最近更新 更多