【问题标题】:Java - Change font in a JTextPane containing HTMLJava - 在包含 HTML 的 JTextPane 中更改字体
【发布时间】:2012-03-09 06:53:08
【问题描述】:

我有一个 JTextPane,并且在该 JTextPane 中有一些文本。但是,因为我一直在窗格中使用 HTML,所以文本似乎已自动更改为 Times New Roman。

我正在尝试将 JTextPane 中的字体类型设置为 GUI 的默认字体(JTextPane 不是 HTML 时的字体)。但是我不能只将字体设置为一种字体,因为它与操作系统不同,因此我想找到一种方法来获取默认字体,然后将我拥有的文本更改为默认字体。

为了演示转换时如何将文本交换为 Times New Roman,以下代码是我使用的格式。我怎样才能改变它来实现我的目标?

import javax.swing.JFrame;
import javax.swing.JTextPane;


public class GUIExample {

    public static void main(String[] args) {

        JFrame frame = new JFrame("My App");
        frame.setSize(300,300);
        JTextPane pane = new JTextPane();
        pane.setContentType("text/html");
        pane.setText("<html><b>This is some text!</b></html>");
        frame.add(pane);

        frame.setVisible(true);

    }

}

谢谢!

【问题讨论】:

    标签: java swing jtextpane


    【解决方案1】:

    以下方法可以解决问题:

     pane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
    

    (请注意,JTextPane 扩展了 JEditorPane。)

    更新(2016 年 8 月):

    为了使设置在外观和系统更改(例如 Windows 控制面板中的字体更改)中保留下来,可以在此处放置该行:

      @Override
      public void updateUI() {
          super.updateUI();
          putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
      }
    

    (在构造过程中也调用。)

    【讨论】:

      【解决方案2】:

      最简单的方法大概是这样的:

      string fontfamily = pane.getFont().getFamily();
      

      这将为您提供默认字体。然后使用 CSS 应用它:

      pane.setText("<html><body style=\"font-family: " + fontfamily + "\"<b>This is some text!</b></html>");
      

      【讨论】:

      • 这对我有帮助,我在另一个类中实现了一个新方法来返回组件的默认字体,然后在与您自己类似的 HTML 中使用它。谢谢。
      【解决方案3】:

      JComponent html 渲染器使用自己的字体,而不是 JComponent 的字体。为了让组件呈现相同的效果,您需要在 html 字符串中设置字体属性。除此之外,您还需要设置字体系列、大小、粗体/斜体等。

      例如,您可以执行以下操作:

      JTextPane pane = new JTextPane();
      Font font = pane.getFont();
      pane.setContentType("text/html");
      pane.setText("<html><font face=\"" + font.getFamily() + "\" size=\"" + font.getSize() + "\"></font>This is some text!</html>");
      

      创建一个为您执行此操作的函数将是相当简单的。传递一个 JComponent 和一个字符串,它会为你创建 html 文本,包括所有的字体标签。

      【讨论】:

      • 我尝试了你的方法,但它似乎对我不起作用,完全按照你的显示方式进行。
      • 是那些在技术上需要在许多其他标签中重新指定的迂腐标签之一 - 你不能只将它包裹在外面。所以这个解决方案对于一般内容来说太脆弱了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2017-08-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多