在Java中绘制文本,外观和感觉问题

时间:2011-11-16 18:31:32

标签: java swing fonts look-and-feel jtogglebutton

我已经覆盖了扩展JToggleButton的paintComponent方法,以便在切换按钮时可以使用TexturePaint填充文本。我遇到的问题是我似乎无法使用与我的外观相同的字体来绘制文本作为默认设置。我试过g2d.setFont(this.getFont()); ,“这个”是我正在使用的按钮。字体很接近,但在绘制时看起来比默认文本更大胆。是否有更好的方法来绘制文本,使其看起来与默认相同,除了颜色?提前谢谢!

2 个答案:

答案 0 :(得分:4)

如果要覆盖paintComponent()方法,则应该已将Graphics对象配置为具有切换按钮的Font。差异可能是因为抗锯齿默认情况下没有打开。

我发现一些代码在非常有限的测试中对我有用。在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();

我在这篇帖子中被警告 - How to set text above and below a JButton icon? - 这不适用于所有平台和LAF。该评论还提供了关于如何绘制文本的建议解决方案。

答案 1 :(得分:3)

这个问题很相似,并提供了答案:How do I get the default font for Swing JTabbedPane labels?

我不太确定密钥会是什么,但是按照这个答案你可能想尝试:

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));