如何读取RTF文件并在JavaFX中显示

如何读取RTF文件并在JavaFX中显示,javafx,javafx-2,textarea,javafx-8,rtf,Javafx,Javafx 2,Textarea,Javafx 8,Rtf,我的目标是从富文本格式的文件中读取内容,然后在JavaFX文本区域中以格式显示内容。我已经用一个纯文本文件(ANSI编码)完成了这项工作。当我尝试读取rtf文件时,它会显示所有文本以及格式符号。是否有一个函数在扫描时解释这些格式符号?这是很难找到一个答案,所以任何帮助是非常感谢 您可以从我的控制器类中看到我当前的文件读取函数: import java.io.File; import java.io.FileNotFoundException; import java.net.URL; impor

我的目标是从富文本格式的文件中读取内容,然后在JavaFX文本区域中以格式显示内容。我已经用一个纯文本文件(ANSI编码)完成了这项工作。当我尝试读取rtf文件时,它会显示所有文本以及格式符号。是否有一个函数在扫描时解释这些格式符号?这是很难找到一个答案,所以任何帮助是非常感谢

您可以从我的控制器类中看到我当前的文件读取函数:

import java.io.File;
import java.io.FileNotFoundException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.Scanner;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextArea;


public class Screen2Controller implements Initializable , ControlledScreen {

    ScreensController myController; 

   //read from file in Dropbox
   @FXML
   public void displayText() {
        try {
            //rtf reads text and format characters
            Scanner s = new Scanner(new File("C:/Users/EECSDept/Dropbox/EECS Hallway Display/Department Info/rtftest.rtf")).useDelimiter("\\s+");
            while (s.hasNext()) {
                dinfoTextArea.appendText(s.next() + " "); // read the next token
            }
        } 
        catch (FileNotFoundException ex) {
            System.err.println("File not found - check file path | "+ex);
        }

    } //end displaytext

    //must reference specific textarea with correct fxid
    @FXML TextArea dinfoTextArea;
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        displayText(); //call file reading function
    }



    public void setScreenParent(ScreensController screenParent){
        myController = screenParent;
    }

    @FXML
    private void goToScreen1(ActionEvent event){
       //go home
       myController.setScreen(ScreensFramework.screen1ID);
    }

    @FXML
    private void goToProgram(ActionEvent event){
       myController.setScreen(ScreensFramework.programID);
    }

    @FXML
    private void goToMap(ActionEvent event){
       myController.setScreen(ScreensFramework.mapID);
    }


} //end screen2controller
这是我的文本区域的输出: {\rtf1\ansi\ansicpg1252\deff0\nouicompat\deflang1033{\fonttbl{\f0\fnil\fcharset0 Calibri;}{*\generator Riched20 6.2.9200}\viewkind4\uc1\pard\sl240\slmult1\f0\fs22\lang9这是一个rtf文档12 3\par\tab选项卡\par\b这是粗体\par}

当我希望将其输出时:

这是一个rtf文档12 3

___标签


这是粗体的

我不知道有任何现成的解决方案,但您可以通过结合两种成分来实现这一点:RTF解析器(如)和富文本控件(如)。我可以在这方面帮助你。但是,如果您不需要编辑支持,可以使用而不是RichTextFX。如果您需要编辑支持并希望能够保存编辑的内容,则需要RTF文档生成器,例如。