为了账号安全,请及时绑定邮箱和手机立即绑定

多个 FXML 文件,每个文件都有控制器 - 附加后 TextArea 无法正确显示文本

多个 FXML 文件,每个文件都有控制器 - 附加后 TextArea 无法正确显示文本

跃然一笑 2022-07-06 17:24:48
我想将我的 FXML 分成更小的文件,每个文件都有自己的控制器。在 main 中,我为每个控制器创建实例并访问textAreaSample并尝试附加文本。我没有看到文字正在改变。为什么?Alert正在显示来自此的文本TextArea:alert.setContentText(textAreaSample.getText());我不知道如何设置所有 fxml 文件和控制器。我应该如何设置这一切?这是我的主要“sample.fxml”文件:<GridPane fx:controller="sample.ControllerSample"      xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">    <fx:include fx:id="sending" source="Sending.fxml" GridPane.columnIndex="0" GridPane.rowIndex="0"/>    <TextArea fx:id="textAreaSample" prefWidth="200" prefHeight="200"          GridPane.columnIndex="1" GridPane.rowIndex="0" text="Sample">    </TextArea></GridPane>及其控制器:public class ControllerSample {    @FXML    private TextArea textAreaSample;    public ControllerSample() {}    public TextArea getTextAreaSample() {        return textAreaSample;    }    public void setTextAreaSample(TextArea textAreaSample) {        this.textAreaSample = textAreaSample;    }}现在我有Sending.fxml文件:<GridPane fx:controller="sample.ControllerSending"          xmlns:fx="http://javafx.com/fxml" alignment="center" hgap="10" vgap="10">        <fx:include fx:id="sendingPhotos" source="SendingPhotos.fxml" GridPane.columnIndex="0" GridPane.rowIndex="0"/></GridPane>及其控制器:public class ControllerSending {    public ControllerSending() {}}这是SendingPhotos.fxml代码:<TextArea xmlns="http://javafx.com/javafx"      xmlns:fx="http://javafx.com/fxml"      fx:controller="sample.ControllerSendingPhotos" fx:id="textAreaSendingPhotos" prefWidth="200" prefHeight="200"      text="Photos"/>和控制器:public class ControllerSendingPhotos {    @FXML    private TextArea textAreaSendingPhotos;    public ControllerSendingPhotos() {}    public TextArea getTextAreaSendingPhotos() {        return textAreaSendingPhotos;    }    public void setTextAreaSendingPhotos(TextArea textAreaSendingPhotos) {        this.textAreaSendingPhotos = textAreaSendingPhotos;    }}
查看完整描述

1 回答

?
慕田峪9158850

TA贡献1794条经验 获得超8个赞

要访问textArea嵌套的 fxml,您必须更改控制器:


public class ControllerSample {

    @FXML

    private TextArea textAreaSample;


    @FXML

    private ControllerSending sendingController;


    public ControllerSample() {

    }


    public TextArea getTextAreaSample() {

        return textAreaSample;

    }


    public void setTextAreaSample(TextArea textAreaSample) {

        this.textAreaSample = textAreaSample;

    }


    protected ControllerSending getSendingController() {

        return sendingController;

    }

}


public class ControllerSending {

    @FXML

    private ControllerSendingPhotos sendingPhotosController;


    public ControllerSending() {

    }


    protected ControllerSendingPhotos getSendingPhotosController() {

        return sendingPhotosController;

    }

}


public class Main extends Application {


    @Override

    public void start(Stage primaryStage) throws Exception {


        FXMLLoader loaderSample = new FXMLLoader(getClass().getResource("sample.fxml"));


        Parent root = loaderSample.load();


        ControllerSample controllerSample = (ControllerSample) loaderSample.getController();


        TextArea textAreaSample = controllerSample.getTextAreaSample();

        textAreaSample.setText("\ndebug textAreaSample\n");


        TextArea textAreaSendingPhotos = controllerSample.getSendingController().getSendingPhotosController()

            .getTextAreaSendingPhotos();

        textAreaSendingPhotos.setText("test test test");


        primaryStage.setTitle("Hello World");

        primaryStage.setScene(new Scene(root, 800, 400));

        primaryStage.show();


    }


    public static void main(String[] args) {

        launch(args);

    }

}



查看完整回答
反对 回复 2022-07-06
  • 1 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号