使用带有Scala for循环的JavaFX和映射导致FXML-Binding失败

时间:2016-06-30 21:05:10

标签: scala javafx fxml

我使用JavaFX + FXML与Scala一起构建GUI但是当我使用for循环或映射(Scala集合)时,我在Controller中获取来自FXML文件的所有控件的NullPointerException )。

信息:我在Java中完全编写了完全相同的示例并使用了for-loop并且它工作正常。它只能在Scala中失败。

我构建了一个非常简单的FXML + Controller,因此您可以重现失败(您需要对其中一个循环进行注释以对其进行测试)。

这是我简单的FXML(example.fxml):

<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.layout.GridPane?>


<GridPane fx:id="grid" prefHeight="289.0" prefWidth="473.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="application.Controller2">
</GridPane>

这里是Controller2.scala:

package application
import javafx.fxml.FXML
import javafx.scene.layout.{ GridPane, ColumnConstraints }
import javafx.scene.shape.Rectangle;

class Controller2 {
  @FXML private var grid: GridPane = _

  @FXML def initialize = {
    println(grid)

    // doesn't work
    for (i <- 0 until 100) {
      grid.getColumnConstraints().add(new ColumnConstraints(100));
      grid.add(new Rectangle(10, 10), i, 0);
    }

    // works
    var i = 0
    while (i < 100) {
      grid.getColumnConstraints().add(new ColumnConstraints(100));
      grid.add(new Rectangle(10, 10), i, 0);
      i = i + 1
    }
  }
}

对此事的任何见解都将受到高度赞赏

0 个答案:

没有答案