4

我重写了扩展 JToggleButton 的 paintComponent 方法,以便在切换按钮时可以使用 TexturePaint 填充文本。我遇到的问题是我似乎无法使用与默认外观相同的字体来绘制文本。我试过 g2d.setFont(this.getFont()); ,其中“this”是我正在使用的按钮。字体很接近,但在我绘制它时显得比默认文本更粗。有没有更好的方法来绘制文本,使其看起来与默认值相同,除了颜色?提前致谢!

4

2 回答 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 回答