0

有没有办法可以在同一个摆动组件中使用两种完全不同的字体?

我的意思是像两个单独的 .tff 文件(以任何方式处理)。唯一的要求是文本是可编辑的。

我也对外部库开放。那也行。我会自己寻找它们,但这是一个次要功能,我必须使用它们中的每一个的 API 来查看它是否存在......

也欢迎做超级 AND 下标的外部库,只要我能控制脚本的大小和高度。

4

1 回答 1

4

选项是:JTextPanet: 有一个文档来管理数据和编辑器工具包来读写具有编辑能力的文本,即使有样式(例如,字体类型和颜色前景)。您也可以实现撤消重做选项。

但是,为了满足您的问题,我正在编写一个小片段StyleDocument来展示它是如何工作的。

在此处输入图像描述

  StyledDocument styleDocument =  jTextPane1.getStyledDocument();
  Style primaryStyle = styleDocument.addStyle("Primary", null);
  Style secondaryStyle = styleDocument.addStyle("Secondary", primaryStyle);


  StyleConstants.setFontFamily(primaryStyle, "American Captain");
                        // use font-family from your platform
  StyleConstants.setFontSize(primaryStyle, 24);

  StyleConstants.setFontFamily(secondaryStyle, "Bira PERSONAL USE ONLY");
                       // use font-family from your platform
  StyleConstants.setFontSize(secondaryStyle, 20);
  StyleConstants.setForeground(primaryStyle, new Color(0x552AFF));
  StyleConstants.setForeground(secondaryStyle, Color.black);

  try {
      styleDocument.insertString(0, "Title with American Captain font\n\n", primaryStyle);
      styleDocument.insertString(styleDocument.getLength(), "Font demonstration with JTextPane. "
              + "Seriously, it is powerful and has the power to do all kind of styling with text. "
              + "check it out, check its mighty power and be embrassed\n", secondaryStyle);
   } catch (BadLocationException ex) {
                Logger.getLogger(JTextPaneTest.class.getName()).log(Level.SEVERE, null, ex);
   }

每个 Swing Text 组件都与一个称为 Document 的模型相关联以管理数据。我们在这段代码中所做的是,我们设置了不同的样式实例来StyleDocumentJTextPane组件关联。我假设您知道如何添加JTextPaneJFrame显示它。这两种不同的风格primarysecondary具有不同的前景和字体家族:"American Captain""Bira PERSONAL USE ONLY". 您可以将它们替换为您的平台中可用的字体系列,包括serifsans-serif. 请记住,由创建的这些样式StyleDocument.addStyle()具有父子层次关系。子元素的样式属性(前景、背景、字体大小、字体样式)将覆盖父元素的属性。

但是请阅读这些教程文章:

  1. 使用文本组件
  2. 如何使用编辑器窗格和文本窗格
于 2013-10-20T17:57:57.593 回答