我重写了扩展 JToggleButton 的 paintComponent 方法,以便在切换按钮时可以使用 TexturePaint 填充文本。我遇到的问题是我似乎无法使用与默认外观相同的字体来绘制文本。我试过 g2d.setFont(this.getFont()); ,其中“this”是我正在使用的按钮。字体很接近,但在我绘制它时显得比默认文本更粗。有没有更好的方法来绘制文本,使其看起来与默认值相同,除了颜色?提前致谢!
问问题
404 次
2 回答
4
如果您要覆盖paintComponent() 方法,那么应该已经将Graphics 对象配置为具有切换按钮的字体。差异可能是因为默认情况下未打开抗锯齿。
我在非常有限的测试中发现了一些对我有用的代码。在 paintComponent() 方法中尝试以下操作:
Graphics2D g2 = (Graphics2D)g.create();
Toolkit toolkit = Toolkit.getDefaultToolkit();
Map map = (Map)(toolkit.getDesktopProperty("awt.font.desktophints"));
if (map != null)
{
g2.addRenderingHints(map);
}
g2.drawString(...);
g2.dispose();
我在这篇文章中被警告 -如何在 JButton 图标上方和下方设置文本?- 这不适用于所有平台和 LAF。该评论还提供了有关如何绘制文本的建议解决方案。
于 2011-11-16T20:06:19.567 回答
3
这个问题类似,并提供了答案:如何获取 Swing JTabbedPane 标签的默认字体?
我不太确定关键是什么,但是按照这个答案,您可能想尝试:
UIManager.getLookAndFeelDefaults().getFont("ToggleButton.font");
编辑
这不是链接问题的片段,但经过少量测试后,它似乎等同于:
UIManager.getDefaults().getFont("ToggleButton.font");
这是链接问题中给出的代码。
编辑 2
我想我找到了解决办法。默认返回的只是一个普通字体,我在一个示例中解决了这个问题:
this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.getFont().getStyle(), this.getFont().getSize()));
我的建议(为了让它不那么难看)是为你的类添加一些默认字体样式和大小的私有属性(你可以在构造函数中设置它们):
fontStyle = this.getFont().getStyle();
fontSize = this.getFont().getSize();
然后你可以清理:
this.setFont(UIManager.getDefaults().getFont("ToggleButton.font").deriveFont(this.fontStyle, this.fontSize));
于 2011-11-16T19:18:39.403 回答