如何在JavaFX应用程序中显示HTML

时间:2015-06-14 12:08:42

标签: java javafx javafx-8

我正在开发一个FontViewer应用程序,它根据所选的字体样式更改文本的字体。

这是我的应用程序的控制器类

{{1}}

我的应用程序的屏幕截图:

enter image description here

当我使用TextArea时,它只显示纯HTML代码,而不是将HTML转换为Text。我必须使用哪种控件才能完成此操作?

P.S:我尝试过TextFlow,但它无法正常工作,因为我需要为所需文本显示不同的样式和字体大小。

我也看过WebView,但不明白它是如何解决上述问题的。

2 个答案:

答案 0 :(得分:10)

使用网络视图:

@FXML
private WebView fontWebView ;

// ...

public void changeFont() {
    StringBuilder sb = new StringBuilder(fontText);
    for (int i = 0; i < fontSizes.length; i++) {
        sb.append("<p style='font-family:")
          .append(fontListView.getSelectionModel().getSelectedItem())
          .append(";font-size:")
          .append( fontSizes[i])
          .append("'>This is Sample Text</p>");
    }
    fontText = sb.toString();
    fontWebView.getEngine().loadContent(fontText);
}

答案 1 :(得分:1)

这是一个很晚的答案,但我想将它传递给那些需要将字体应用于各种 FX 控件的人(我需要这样做):

通过使用 WebView 的 setFont 方法,您可以在不使用 TextArea 的情况下显示字体。这具有适用于大多数文本显示 FX 控件的优点,包括 ButtonTextField 等...,并且可以与下载的 TTF 或 OTF 文件一起使用。

// examples create a 20 pt font
// system font
Font f = Font.font("SansSerif", Font.PLAIN, 20);
// TTF/OTF added to your project as a resource:
Font f = Font.loadFont(ClassLoader.getSystemClassLoader().getResourceAsStream("ResourceName"), 20);
// TTF/OTF loaded from a file dynamically... read the font file into an input stream, and:
Font f = Font.loadFont(inputStream, 20);
// to use:
fontTextArea.setFont(f);

注意:一些脚本 TTF/OTF 字体可以在系统字体适合的区域上方或下方扩展,因此在使用下载的字体时进行适当的测试。