Java 将TextFlow添加到FXML控制器会使GUI为空

Java 将TextFlow添加到FXML控制器会使GUI为空,java,user-interface,javafx,Java,User Interface,Javafx,所以我做了一个基本的应用程序,通常看起来像 但是,如果我在控制器类中添加对FXML TextFlow组件(fx:id=“tofl”)的引用,GUI将变为空白,就像 请解释为什么会发生这种情况。我的代码如下: main.FXML <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.Button?> <?import javafx.scene.control.CheckBox?&

所以我做了一个基本的应用程序,通常看起来像

但是,如果我在控制器类中添加对FXML TextFlow组件(fx:id=“tofl”)的引用,GUI将变为空白,就像

请解释为什么会发生这种情况。我的代码如下:

main.FXML

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.CheckBox?>
<?import javafx.scene.control.ChoiceBox?>
<?import javafx.scene.control.TextField?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.text.TextFlow?>

<fx:root prefHeight="389.0" prefWidth="732.0" styleClass="grey" stylesheets="@CSS.css" type="AnchorPane" xmlns:fx="http://javafx.com/fxml">
<TextFlow fx:id="tofl" layoutX="14.0" layoutY="14.0" prefHeight="299.0" prefWidth="703.0" />
<Button fx:id="addBtn" layoutX="596.0" layoutY="320.0" mnemonicParsing="false" text="Add new Text block" />
<TextField fx:id="txt" layoutX="14.0" layoutY="320.0" prefHeight="25.0" prefWidth="572.0" />
<CheckBox fx:id="italic" layoutX="14.0" layoutY="360.0" mnemonicParsing="false" styleClass="chckbox" text="Italic" />
<CheckBox fx:id="bold" layoutX="104.0" layoutY="360.0" mnemonicParsing="false" text="Bold" />
<CheckBox fx:id="underline" layoutX="180.0" layoutY="360.0" mnemonicParsing="false" text="Underline" />
<ChoiceBox fx:id="color" layoutX="270.0" layoutY="356.0" prefHeight="25.0" prefWidth="121.0" />
<ChoiceBox fx:id="size" layoutX="399.0" layoutY="356.0" prefHeight="25.0" prefWidth="121.0" />
</fx:root>
TextFlow.java-主类

package textflow;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

 public class TextFlow extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        mainController customControl = new mainController();
        stage.setScene(new Scene(customControl));
        stage.setTitle("Custom Control");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}

mainController.java中的“@FXML TextFlow tofl;”是导致问题的原因。我把它取下来,一切都好。我添加了它,它是空的。

看看
mainController.java中的导入:

它们不包含
javafx.scene.text.TextFlow的导入,而是使用
TextFlow.TextFlow
。您需要将导入添加到
javafx.scene.text.TextFlow
。另外,考虑重命名<代码> TrimeFux类。使用与您使用的API中的类型相同的类型名很容易导致混淆

执行
mainController
的构造函数时,将处理fxml文件,直到
FXMLLoader
尝试将
javafx.scene.text.TextFlow
实例注入
tofl
字段,由于类型不匹配,导致出现
IOException

由于您只是忽略了
catch
子句中的异常,而不是对其进行处理,因此构造函数将正常完成,并将部分加载的节点添加到场景中。通常最好至少打印异常,除非您知道异常不会导致(或指示)问题,因为这会使调试更容易

package textflow;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

 public class TextFlow extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        mainController customControl = new mainController();
        stage.setScene(new Scene(customControl));
        stage.setTitle("Custom Control");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }

}