在同一个Component中使用两个不同的.ttf字体文件

时间:2013-10-20 17:02:10

标签: java swing

有没有办法在同一个swing组件中使用两种完整的不同字体?

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

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

我也欢迎使用超级和下标的外部图书馆,只要我可以控制剧本的大小和高度。

1 个答案:

答案 0 :(得分:4)

选项是:JTextPanet:具有管理数据的文档和编辑器工具包,即使使用样式(例如,字体类型和颜色前景),也可以读取和编写具有编辑功能的文本。您也可以实现undo-redo选项。

然而,为了满足您的问题,我正在编写一个带有 StyleDocument 的小片段来展示它的工作原理。

enter image description here

  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的模型相关联,以管理数据。我们在此代码中所做的是,我们将不同的样式实例设置为与JTextPane组件关联的StyleDocument。我假设您知道如何将JTextPane添加到JFrame并显示它。两种不同的样式primarysecondary具有不同的前景和字体系列:"American Captain""Bira PERSONAL USE ONLY"。您可以使用平台中提供的font-family替换它们,包括serifsans-serif。请记住,StyleDocument.addStyle()创建的这些样式具有父子层次关系。子项的样式属性(前景,背景,字体大小,字体样式)将覆盖父项的属性。

但请仔细阅读以下教程:

  1. Using Text Components
  2. How to Use Editor Panes and Text Panes