2014-09-22 16 views
1

我要從頭開始使用JavaFX。使用JavaFX出發:不能javafx.scene.control.Label場application.SceneController.myLabel設置爲javafx.scene.text.Text

的錯誤,當我執行我的計劃時,之前我試圖做到這一點,它工作得很好,並點擊按鈕的工作,但在它之前,我有意使按鈕點擊更改文本。

<?import javafx.scene.text.*?> 
<?import javafx.scene.control.*?> 
<?import java.lang.*?> 
<?import javafx.scene.layout.*?> 
<?import javafx.scene.layout.AnchorPane?> 

<AnchorPane xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="application.SceneController"> 
    <children> 
     <AnchorPane layoutX="-100.0" layoutY="-224.0" prefHeight="572.0" prefWidth="430.0"> 
     <children> 
      <Button layoutX="205.0" layoutY="253.0" mnemonicParsing="false" onAction="#handleActionButton1" text="Do you want swag?" /> 
      <Text fx:id="myLabel" layoutX="280.0" layoutY="339.0" strokeType="OUTSIDE" strokeWidth="0.0" text="My text will change!" /> 
     </children> 
     </AnchorPane> 
    </children> 
</AnchorPane> 

這就是FXML,就行了,你可以看到文本是「我的文字會改變!」。在Eclipse的FXML文本編輯器中,它給了我這個錯誤:「您不能將'文本'分配給控制器字段'標籤'」。

這是我SceneController類:

package application; 

import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.scene.control.Label; 

public class SceneController{ 

    @FXML 
    private Label myLabel; 

    @FXML 
    public void handleActionButton1(ActionEvent event){ 
     System.out.println("Hello World!"); 
     myLabel.setText("Hello World!"); 
    } 

} 

正如我上面提到的,之前我曾在控制檯上的標籤,它會成功輸出「Hello World」的,但現在這樣做,但不執行我的Java應用程序,它給了我很長的錯誤:

javafx.fxml.LoadException: 
/C:/Users/Neil/development/JavaFX/bin/application/appfxml.fxml:14 

    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source) 
    at javafx.fxml.FXMLLoader.load(Unknown Source) 
    at application.Main.start(Main.java:15) 
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$153(Unknown Source) 
    at com.sun.javafx.application.LauncherImpl$$Lambda$51/1299755900.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$166(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$45/1051754451.run(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl.lambda$null$164(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/1698159280.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$165(Unknown Source) 
    at com.sun.javafx.application.PlatformImpl$$Lambda$46/1775282465.run(Unknown Source) 
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) 
    at com.sun.glass.ui.win.WinApplication.lambda$null$141(Unknown Source) 
    at com.sun.glass.ui.win.WinApplication$$Lambda$37/1109371569.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 
Caused by: java.lang.IllegalArgumentException: Can not set javafx.scene.control.Label field application.SceneController.myLabel to javafx.scene.text.Text 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) 
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(Unknown Source) 
    at sun.reflect.UnsafeObjectFieldAccessorImpl.set(Unknown Source) 
    at java.lang.reflect.Field.set(Unknown Source) 
    at javafx.fxml.FXMLLoader.injectFields(Unknown Source) 

回答

4

裏面你FXML,您已經定義了一個Text,其中如在你的控制器,你要使用它作爲Label

堆棧跟蹤(錯誤)喊它它最大的嗓門:

Can not set javafx.scene.control.Label field application.SceneController.myLabel to javafx.scene.text.Text

在你的控制器,你需要將myLabel定義修改爲

@FXML 
private Text myLabel;