我最近开始使用Java FX,FXML和场景构建器,并且我一直在尝试将关键监听器添加到场景的其中一个控制器中。但是当我这样做的时候,关键的听众并没有按照自己的意愿工作,我认为这是因为他们没有专注于那个特定的场景。我试图访问控制器所属的场景,以便直接设置它,但它出现了它是空场景的一部分。
有没有办法获得对使用此控制器的场景的访问权限,以便尝试将关键事件和侦听器分配给该特定场景?我应该通过整个应用程序中的静态rootController吗?或者,更好的是,有更简单的方法来解决这个问题吗?
我看到的大多数示例都假设所有内容大部分都在一个主类中,或者在没有引入FXML的情况下在其他几个类之间分开,而且当我拥有java控制器时,我不确定如何应用它们的修复程序,FXML页面和主要应用程序全部分开。
感谢您的帮助!
答案 0 :(得分:17)
使用Controller中绑定的任何控件并在其上使用getScene()
。
请记住不要在initialize()
中使用它,因为在为控制器调用initialize()
时,根元素(虽然已经完全处理)仍未放置在场景中
public class WindowMainController implements Initializable {
@FXML
private Button button;
@FXML
private void handleButtonAction(ActionEvent event) {
System.out.println(button.getScene()); // Gives you the Scene
}
@Override
public void initialize(URL url, ResourceBundle rb) {
System.out.println(button.getScene()); // Prints null
}
}