有没有办法在同一个swing组件中使用两种完整的不同字体?
我的意思是两个单独的.tff文件(以任何方式处理)。唯一要求是文本是可编辑的。
我也对外部图书馆开放。那也行。我会自己寻找它们,但这是一个小功能,我必须使用它们中的每一个的API来查看它是否存在...
我也欢迎使用超级和下标的外部图书馆,只要我可以控制剧本的大小和高度。
答案 0 :(得分:4)
选项是:JTextPanet
:具有管理数据的文档和编辑器工具包,即使使用样式(例如,字体类型和颜色前景),也可以读取和编写具有编辑功能的文本。您也可以实现undo-redo选项。
然而,为了满足您的问题,我正在编写一个带有 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的模型相关联,以管理数据。我们在此代码中所做的是,我们将不同的样式实例设置为与JTextPane
组件关联的StyleDocument
。我假设您知道如何将JTextPane
添加到JFrame
并显示它。两种不同的样式primary
和secondary
具有不同的前景和字体系列:"American Captain"
和"Bira PERSONAL USE ONLY"
。您可以使用平台中提供的font-family替换它们,包括serif
和sans-serif
。请记住,StyleDocument.addStyle()
创建的这些样式具有父子层次关系。子项的样式属性(前景,背景,字体大小,字体样式)将覆盖父项的属性。
但请仔细阅读以下教程: