JavaFX参数传递

时间:2014-05-17 11:18:19

标签: java javafx javafx-2 parameter-passing fxml

我一直在努力使用这段代码,我试图将2个字符串的值发送到另一个" window"为他们执行一项功能,但我不断遇到各种各样的错误。

我已经彻底阅读了Dependancy Injection主题,其主要问题在于第10行的(窗格)演员。

此外,我已阅读this one as well,答案和代码只是简单混乱。

我真正想做的是:

我已经说过主要文件了,我试图将其中一个值发送给它的孩子:

对于MAINcontroller我的代码是这样的:

@FXML
void initialize() throws MalformedURLException
{
   parameterSender.setOnAction(new EventHandler<ActionEvent>()
    {
        @Override
        public void handle(ActionEvent event)
        {
            Parent root;
            try
            {
                root = FXMLLoader.load(getClass().getClassLoader().getResource("filetree/childWindow.fxml"),resources);
                Stage stage = new Stage();
                stage.setTitle("Child");
                stage.setScene(new Scene(root, 500, 500));
                FXMLLoader loader = FXMLLoader(getClass().getClassLoader().getResource("filetree/childWindow.fxml"), resources); //I fixed this, thank you very much, Uchiha Itachi
                childWindowController controller = loader.<childWindowController>getController();
                controller.firstParameter = getFirstField(); //this is the getter of the firstTextAreaField
                controller.secondParameter = getSecondField();//this is the getter of the secondTextAreaField
                stage.show();
                } catch (IOException e)
            {
                e.printStackTrace();
            }//End of Catch
}//End of Initialize

对于CHILDcontroller:

@FXML
void testAcquiredParametersFromParent(MouseEvent event)
{
    System.out.println(firstParameter + " " + secondParameter);
}

当我运行此代码时,我在运行时遇到此异常:

java.lang.ClassCastException: javafx.scene.layout.AnchorPane cannot be cast to javafx.fxml.FXMLLoader
at filetree.FXMLDocumentController$5.handle(FXMLDocumentController.java:17)
at filetree.FXMLDocumentController$5.handle(FXMLDocumentController.java:3)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:69)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:28)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Node.fireEvent(Node.java:6867)
at javafx.scene.control.Button.fire(Button.java:179)
at com.sun.javafx.scene.control.behavior.ButtonBehavior.mouseReleased(ButtonBehavior.java:193)
at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:336)
at com.sun.javafx.scene.control.skin.SkinBase$4.handle(SkinBase.java:329)
at com.sun.javafx.event.CompositeEventHandler.dispatchBubblingEvent(CompositeEventHandler.java:64)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:217)
at com.sun.javafx.event.EventHandlerManager.dispatchBubblingEvent(EventHandlerManager.java:170)
at com.sun.javafx.event.CompositeEventDispatcher.dispatchBubblingEvent(CompositeEventDispatcher.java:38)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:37)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.BasicEventDispatcher.dispatchEvent(BasicEventDispatcher.java:35)
at com.sun.javafx.event.EventDispatchChainImpl.dispatchEvent(EventDispatchChainImpl.java:92)
at com.sun.javafx.event.EventUtil.fireEventImpl(EventUtil.java:53)
at com.sun.javafx.event.EventUtil.fireEvent(EventUtil.java:33)
at javafx.event.Event.fireEvent(Event.java:171)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3311)
at javafx.scene.Scene$MouseHandler.process(Scene.java:3151)
at javafx.scene.Scene$MouseHandler.access$1900(Scene.java:3106)
at javafx.scene.Scene.impl_processMouseEvent(Scene.java:1563)
at javafx.scene.Scene$ScenePeerListener.mouseEvent(Scene.java:2248)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:250)
at com.sun.javafx.tk.quantum.GlassViewEventHandler$MouseEventNotification.run(GlassViewEventHandler.java:173)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.GlassViewEventHandler.handleMouseEvent(GlassViewEventHandler.java:292)
at com.sun.glass.ui.View.handleMouseEvent(View.java:530)
at com.sun.glass.ui.View.notifyMouse(View.java:924)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$100(WinApplication.java:17)
at com.sun.glass.ui.win.WinApplication$3$1.run(WinApplication.java:67)
at java.lang.Thread.run(Thread.java:744)

非常感谢任何帮助。

提前谢谢。

编辑\修复了装载机。再次感谢Uchiha Itachi。

1 个答案:

答案 0 :(得分:1)

您的错误基本上是因为以下行

FXMLLoader loader = FXMLLoader.load(getClass().getClassLoader().
                              getResource("filetree/childWindow.fxml"), resources);

在这里,您尝试创建FXMLLoader参考,但您使用了load()的{​​{1}}。

FXMLLoader&#39> FXMLLoader将加载用作 FXML 中的 root 的窗格。所以,而不是使用

load()

你必须直接使用

FXMLLoader.load()