JavaFX 从控制器获取场景
Posted
技术标签:
【中文标题】JavaFX 从控制器获取场景【英文标题】:JavaFX getting scene from a controller 【发布时间】:2014-11-21 12:59:49 【问题描述】:我最近开始使用 Java FX、FXML 和场景构建器,并且一直在尝试将关键侦听器添加到场景的控制器之一。但是,当我这样做时,关键听众并没有按应有的方式工作,我认为这是因为他们没有专注于那个特定的场景。我试图访问控制器所在的场景以便直接设置它,但结果显示它是空场景的一部分。
有没有办法访问使用此控制器的场景,以便尝试将关键事件和侦听器分配给该特定场景?我应该通过整个应用程序中静态的 rootController 吗?或者,更好的是,有没有更简单的方法来解决这个问题?
我看到的大多数示例都假设所有内容大部分都放在一个主类中,或者在没有引入 FXML 的情况下与其他几个类分开,当我有 java 控制器 FXML 时,我不确定如何应用它们的修复页面和主应用程序都分开了。
感谢您的帮助!
【问题讨论】:
【参考方案1】:使用绑定在控制器中的任何控件并在其上使用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
【讨论】:
是的!这给了我场景而不是 null ^^。我试图在 init() 方法中得到它,所以这一定是问题所在!谢谢!现在,我希望可以让 keylisteners 工作:D 如果您尝试将keylisteners
添加到场景中,我建议您在创建场景的地方进行。 虽然我不确定你的要求
我正在尝试使用所有这些东西制作一款游戏,而我现在拥有它的方式有一个场景将是根,我只是根据用户的位置切换舞台在每个时间。换舞台的时候是不是直接加到场景里,关键事件都已经有了?以及如何从控制器外部访问新控制器和舞台内的元素?(即,当图像在舞台控制器中实例化时,制作一个键事件来移动图像)
我希望switch the stage
,你的意思是switch the view
。 Would I just add it onto the scene when I change the stage, so the key events are already there
,如果没有什么阻止你这样做,你可以做到。 And how would I access elements inside the new controller and stage from outside the controller?
你可以为此使用属性绑定以上是关于JavaFX 从控制器获取场景的主要内容,如果未能解决你的问题,请参考以下文章