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

如何从第二个控制器类获取主控制器类中 textArea 中的选定文本?

如何从第二个控制器类获取主控制器类中 textArea 中的选定文本?

慕莱坞森 2023-05-17 16:51:41
我正在尝试从我的 FXMLDocumentController.java 中的 textArea 获取选定的文本,并将其传递给第二个控制器类 HeadingsController.java。我在 Netbeans 中运行该应用程序,它可以正常启动和加载。单击带有 fx:id="h1Link" 的超链接时出现 nullPointerException。空指针异常在 HeadingsController.java 的第 27 行表示它是String selectedText = fxmlDocC.getSelectedTextfromTextArea();FXMLDocumentController.java 是我试图引用的 textArea 所在的位置...package textareatest1;import javafx.fxml.FXML;import javafx.scene.control.TextArea;public class FXMLDocumentController {    @FXML public TextArea textArea;    String selectedText = new String();    @FXML private HeadingsController headingsController = new HeadingsController();    public String getSelectedTextfromTextArea(){        selectedText =  textArea.getSelectedText();        return selectedText;    }    public void replaceSelectedText(String string){        textArea.replaceSelection(string);    }    @FXML public void initialize() {        headingsController.init(this);        textArea.setWrapText(true);    }   }这是上述控制器的 FXML 文件...<?xml version="1.0" encoding="UTF-8"?><?import java.lang.*?><?import java.util.*?><?import javafx.scene.*?><?import javafx.scene.control.*?><?import javafx.scene.layout.*?><BorderPane fx:id="borderPaneRoot" prefHeight="600.0" prefWidth="1000.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" fx:controller="textareatest1.FXMLDocumentController" >    <top>    </top>    <center>        <TextArea fx:id="textArea" />    </center>    <left>        <GridPane id="gridpaneLeft" fx:id="gridpaneLeft" hgap="10.0" prefHeight="200.0" prefWidth="320.0" vgap="10.0" >            <Accordion fx:id="leftAccordion" prefHeight="250.0" prefWidth="680.0">                <panes>
查看完整描述

1 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

这个问题不能通过创建实例来解决FXMLDocumentController,而是通过确保将实例传递给的控制器是与包含的 fxml 一起使用的控制器来解决;您创建的不是new HeadingsController()这个实例。


取而代之的是,FXMLLoader如果您附加到元素的,则将包含元素的控制器注入到具有您获得的名称的Controller字段fx:id中<fx:include>:


public class FXMLDocumentController {


    @FXML public TextArea textArea;

    String selectedText = ""; // why is this field necessary???


    // controller for FXMLHeadings.fxml is automatically injected here

    @FXML private HeadingsController fxmlheadingsController;


    public String getSelectedTextfromTextArea(){

        selectedText =  textArea.getSelectedText();

        return selectedText;

    }


    public void replaceSelectedText(String string){

        textArea.replaceSelection(string);

    }


    @FXML public void initialize() {

        fxmlheadingsController.init(this);

        textArea.setWrapText(true);

    }   


}


查看完整回答
反对 回复 2023-05-17
  • 1 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信