猿问

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

我正在尝试从我的 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>

慕莱坞森
浏览 107回答 1
1回答

qq_花开花谢_0

这个问题不能通过创建实例来解决FXMLDocumentController,而是通过确保将实例传递给的控制器是与包含的 fxml 一起使用的控制器来解决;您创建的不是new HeadingsController()这个实例。取而代之的是,FXMLLoader如果您附加到元素的,则将包含元素的控制器注入到具有您获得的名称的Controller字段fx:id中<fx:include>:public class FXMLDocumentController {&nbsp; &nbsp; @FXML public TextArea textArea;&nbsp; &nbsp; String selectedText = ""; // why is this field necessary???&nbsp; &nbsp; // controller for FXMLHeadings.fxml is automatically injected here&nbsp; &nbsp; @FXML private HeadingsController fxmlheadingsController;&nbsp; &nbsp; public String getSelectedTextfromTextArea(){&nbsp; &nbsp; &nbsp; &nbsp; selectedText =&nbsp; textArea.getSelectedText();&nbsp; &nbsp; &nbsp; &nbsp; return selectedText;&nbsp; &nbsp; }&nbsp; &nbsp; public void replaceSelectedText(String string){&nbsp; &nbsp; &nbsp; &nbsp; textArea.replaceSelection(string);&nbsp; &nbsp; }&nbsp; &nbsp; @FXML public void initialize() {&nbsp; &nbsp; &nbsp; &nbsp; fxmlheadingsController.init(this);&nbsp; &nbsp; &nbsp; &nbsp; textArea.setWrapText(true);&nbsp; &nbsp; }&nbsp; &nbsp;}
随时随地看视频慕课网APP

相关分类

Java
我要回答