如何从ScalaFX中动态创建的元素事件处理程序访问FXML定义的元素?

时间:2014-05-06 23:35:21

标签: scala scalafx

我正在尝试为FXML定义的表单控制器中的动态创建按钮编写一个事件处理程序,它似乎工作正常,但是一旦我尝试访问另一个元素就失败了。

例如,此代码可以正常工作:

import java.util
import java.net.URL
import javafx.{scene => jfxs, fxml => jfxf}
import javafx.event.{EventHandler, ActionEvent}
import scalafx.Includes._

class  MainFormFxmlController extends jfxf.Initializable{
  @jfxf.FXML
  private var anchorPane: jfxs.layout.AnchorPane = _

  @jfxf.FXML
  private var slider: jfxs.control.Slider = _

  def initialize(url: URL, rb: util.ResourceBundle) {
    // the slider variable becomes null at this point if I observe it in the button event handler below and is not null id I don't
    slider.valueProperty.addListener{ (o: javafx.beans.value.ObservableValue[_ <: Number], oldVal: Number, newVal: Number) =>
      // ...
    }

    //...

    val button = new jfxs.control.Button("Button")

    jfxs.layout.AnchorPane.setRightAnchor(button, 63.0)

    jfxs.layout.AnchorPane.setTopAnchor(button, 14.0)

    anchorPane.getChildren.add(button)

   button.setOnAction(new EventHandler[ActionEvent]() {
      @Override
      def handle(event: ActionEvent) {
        println("123") // trying to access the slider variable here makes the whole app fail on load
      }
    })
  }
}

但用println("123")替换if(slider != null) println("123")就足以通过在initialize函数开头抛出NullPointerException来使应用程序失败。

我想要达到的是调整按钮上的滑块值(在创建此特定按钮的同时动态地从FXML加载表格的其余部分)我认为我的错误在于使用错误的方法来做但是我发现用滑块变量进行的空检查会导致失败,不一定是它的值调整。

对我来说这看起来很好奇,好像滑块变量是null我只是检查了这个事实,如果它不可访问,应用程序将无法编译,但我得到的是不同的。< / p>

0 个答案:

没有答案