Java Graphics.drawString()方法中的字体和JLabel一样

4

如何使 Graphics.drawString() 使用与 JLabel 相同的字体?

我已经尝试了所有可以在 UIManager.getDefaults() 中找到的字体,但即使使用以下方法使 drawString() 生成的字符串不那么细,仍无法实现相同字体。

((Graphics2D) g).setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);

它看起来仍然有点不同。


2
没有简单和完整的方法(假设问题是如何在g.drawString中获得与JLabel内部相同的抗锯齿行为 :-) - 通常的解决方法是_不要_使用g.drawString,而是使用配置了文本的JLabel,使其自己绘制到缓冲图像并绘制该图像。或者使用CellRendererPane将标签盖章到所需的位置/大小上。 - kleopatra
2个回答

4

UIManager.getFont("Label.font") 应该在大多数外观下工作。


谢谢,MadProgrammer。但即使使用那种字体,Graphics.drawString() 的输出也与普通的JLabel不同。 - Xmagic
我能假设你调用了g.setFont(UIManager.getFont("Label.font"))吗? - MadProgrammer
是的,当然。似乎Java绘制JLabel与Graphics.drawString()有一些区别; - Xmagic
@Xmagic,你“可以”花些时间阅读BasicLabelUISwingUtilities类,但在短期内,kleopatra的建议会更快地解决你的问题。 - MadProgrammer
非常感谢您的帮助!!我已经解决了它!!我查看了“BasicLabelUI”并找到了用于显示JLabel的代码。请使用SwingUtilities2.drawStringUnderlineCharAt()而不是使用Graphics.drawString() - Xmagic
1
@Xmagic 请记住,太阳包下的类是受限 API,a) 不能在沙盒中使用 b) 没有稳定性保证 c) 在其他供应商的 JRE 中不可用。如果您可以接受这些限制 - 那很棒 :-) - kleopatra

2

那么new JLabel().getFont()怎么样?


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