JavaFX参数传递
我一直在为这段代码苦苦挣扎,我试图将两个字符串的值发送到另一个“窗口”来对它们执行一个函数,但我不断收到各种各样的错误 我已经彻底阅读了这篇文章,它的主要问题是第10行中的(窗格)投射 而且,我已经读过了,答案和代码都很混乱 我真正想做的是: 我有一个主文档,我试图将它的一个值发送给它的子文档: 对于主控制器,我的代码如下所示:JavaFX参数传递,java,javafx,javafx-2,parameter-passing,fxml,Java,Javafx,Javafx 2,Parameter Passing,Fxml,我一直在为这段代码苦苦挣扎,我试图将两个字符串的值发送到另一个“窗口”来对它们执行一个函数,但我不断收到各种各样的错误 我已经彻底阅读了这篇文章,它的主要问题是第10行中的(窗格)投射 而且,我已经读过了,答案和代码都很混乱 我真正想做的是: 我有一个主文档,我试图将它的一个值发送给它的子文档: 对于主控制器,我的代码如下所示: @FXML void initialize() throws MalformedURLException { parameterSender.setOnActio
@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
@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。您的错误基本上是因为下面的一行
FXMLLoader loader = FXMLLoader.load(getClass().getClassLoader().
getResource("filetree/childWindow.fxml"), resources);
在这里,您试图创建FXMLLoader引用,但使用了FXMLLoader
的load()
FXMLLoader的load()
将加载用作FXML中的根的窗格。因此,与其使用
FXMLLoader.load()
你必须直接使用
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getClassLoader().
getResource("filetree/childWindow.fxml"), resources);
只需按照您引用的线程中的第一个示例的相同方式执行即可。您的代码与该代码非常不同。