有没有办法可以在同一个摆动组件中使用两种完全不同的字体?
我的意思是像两个单独的 .tff 文件(以任何方式处理)。唯一的要求是文本是可编辑的。
我也对外部库开放。那也行。我会自己寻找它们,但这是一个次要功能,我必须使用它们中的每一个的 API 来查看它是否存在......
也欢迎做超级 AND 下标的外部库,只要我能控制脚本的大小和高度。
选项是: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 的模型相关联以管理数据。我们在这段代码中所做的是,我们设置了不同的样式实例来StyleDocument
与JTextPane
组件关联。我假设您知道如何添加JTextPane
并JFrame
显示它。这两种不同的风格primary
并secondary
具有不同的前景和字体家族:"American Captain"
和"Bira PERSONAL USE ONLY"
. 您可以将它们替换为您的平台中可用的字体系列,包括serif
和sans-serif
. 请记住,由创建的这些样式StyleDocument.addStyle()
具有父子层次关系。子元素的样式属性(前景、背景、字体大小、字体样式)将覆盖父元素的属性。
但是请阅读这些教程文章: