如何在Java Swing中使用双精度值设置JTextPane中文本的字体大小

4

您好,我正在尝试构建一个Java Swing应用程序,用户可以选择在jtextpane中设置所需的文本字体大小。我正在使用"StyleConstants.setFontSize(attr, int);"。这仅适用于整数值,但当用户给出双精度值(例如8.5)时,上述命令会失败,因为它只接受整数值而不是双精度值。那么我该如何解决这个问题呢?是否有任何接受双精度值的命令?

提前致谢。


嗨,感谢您的快速回复...我想要一个只有8.5的字体大小。它应该类似于MSWord中的字体大小。我的意思是,在MSWord中,我们甚至可以指定双倍值(6.5、8.5),在MSWord中这样做效果很好。我希望我的应用程序行为完全一样。 - user001
除非开发自己的字体系统,否则唯一的解决方法就是将双精度浮点数转换为整数。 - Darren
不确定结果会是什么,但可以使用整数大小创建字体,并使用Font#deriveFont(float size) - Robin
但是达伦,这会如何解决我的目的?将8.5转换为整数将给出一个值为8。但我需要指定8.5的大小。 - user001
1
你说的“没有起作用”是指什么?是出现了异常,还是只是在大小为8和8.5之间没有区别(因为我不确定Java字体是否支持非整数大小)? - Robin
显示剩余2条评论
2个回答

1
您可以尝试使用HTML/CSS:
JTextPane textPane = new JTextPane();
textPane.setContentType("text/html");
textPane.setText("<span style='font-size: 8.5pt'>Hey there!</span>");

我不确定Swing使用的HTML编辑器是否支持pt字号(虽然我没有尝试过),我通常使用px。你能确认一下它是否可行吗? - Andrew Thompson
1
是的,我可以确认 Swing HTML 渲染器在 pt 和 px 之间进行区分。个人而言,我只会在打印时使用 pt,但由于 @user1815809 明确要求使用 8.5(即小数),所以 px 似乎没有太多意义... - Rahel Lüthy
你好 netzwerg.. 很抱歉回复晚了。如果我理解有误请更正,按照上述方法的话会用新内容覆盖掉文本区域中的所有内容。而我想要的是仅修改选中的文本,并保持其它内容不变。 - user001
我的最小示例演示了如何通过使用style元素来格式化文本。显然,你不应该直接使用Hey there!片段,而是要将其用于自己的文本/选择周围。 - Rahel Lüthy

0
以下Swing组件支持HTML格式化:按钮、菜单项、标签、工具提示和选项卡窗格。要使用格式化,需要在文本开头放置一个``标签(在结尾处关闭它是可选的)。例如:
<html><font size="8.5pt">Two</font>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接