更改JavaFX文本区域中的子字符串颜色

时间:2014-06-02 14:45:47

标签: text colors substring javafx-8

我需要更改Text AreaJavaFX的子字符串文字,例如static下方的文字和void为红色。

public static void main(String[] args) {

}

我不知道CSS是否有任何简单的代码或教程?

1 个答案:

答案 0 :(得分:4)

TextArea不支持在一个组件中使用富文本格式的不同格式。我建议你研究方向

  1. TextFlow - 请参阅http://docs.oracle.com/javase/8/javafx/api/javafx/scene/text/TextFlow.html 它用于静态显示富文本,但不提供编辑。 Oracle教程可能是一个可行的起点:http://docs.oracle.com/javase/8/javafx/user-interface-tutorial/text-settings.htm
  2. WebView - 请参阅http://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebView.html WebView可用于显示HTML内容。有几种方法可以利用它。您可以将格式化和彩色文本构造为HTML代码并将其设置为WebView内容 - 或者甚至将一个流行的JavaScript源代码格式化程序/荧光笔加载到WebView组件中。
  3. 如果您要在JavaFX中创建类似Java源代码视图的内容,您可能需要查看第二种方法。简短草图(使用ACE编辑器库,为JavaScript语法着色完成)可能如下所示:

    首先,使用HTML初始化WebView,这里是在FXML控制器中完成的:

    @Override
    public void initialize(URL url, ResourceBundle rb) {
    
        WebEngine engine = this.webView.getEngine();
        engine.setJavaScriptEnabled(true);
        engine.setOnAlert(new EventHandler<WebEvent<String>>() {
    
          @Override
          public void handle(WebEvent<String> t) {
            String data = t.getData();
            System.out.println("alert: " + data);
            textArea.appendText(data);
          }
        });
        engine.load(this.getClass().getResource("content/basics-javascript.html").toExternalForm());
      }  
    

    第二部分:content/basics-javascript.html包含一个HTML页面,用于加载格式化和突出显示所需的JavaScript库:

    <html>
      <head>
        <title>TODO supply a title</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width">
        <style type="text/css" media="screen">
            #editor { 
                position: absolute;
                top: 30px;
                right: 5px;
                bottom: 5px;
                left: 5px;
                border: 1px solid #ccc;
                background-color: #eee;
            }
        </style>
      </head>
      <body>
        <div>ACE-Editor</div>
        <div id="editor">
        function foo(items) {
            var x = "All this is syntax highlighted";
            return x;      
    
        </div>
        <script type="text/javascript" src="js/libs/ace/ace.js" ></script>
        <script type="text/javascript">
          var editor = ace.edit('editor');
    
          editor.getSession().setMode("ace/mode/javascript");
        </script>
      </body>
    </html>
    

    希望有所帮助!